Nasıl yapılır: Visual Basic ve C# projeleri VSProject2 nesnesini kullanarak işleme
VSProject2 Arabirim yöntemleri ve özel özelliklerine erişim sağlar Visual C# ve Visual Basic projeleri. VSProject2Ayrıca erişim sağlar DTE ve Project genel ortam modeliyle nesneleri DTE ve Project özellikleri.
Birçok yöntem ve özelliklerini VSProject2 uygulanacak hep Visual C# ve Visual Basic projeleri. Tek istisna Imports uygulandığı özellik Visual Basic erişim sağlayan ve Imports nesne. Daha fazla bilgi için bkz. Nasıl yapılır: Visual Basic projeleri Imports özelliğini değiştirmek. Events Özelliği gibi projeye özgü olayları, erişim verir VSLangProjWebReferencesEvents ve ReferencesEvents. Olay işleme görevleri diğer konular ele alınmıştır. Daha fazla bilgi için bkz. (Visual Basic ve Visual C# Projects) olaylarını yanıtlama.
Program aracılığıyla oluşturmak nasıl aşağıdaki adımları göstermek bir Visual C# genel otomasyon modeli kullanarak windows uygulaması. Yöntemleri ve özellikleri VSProject2 program aracılığıyla oluşturulan proje denetlemek için kullanılır.
Not
Gördüğünüz iletişim kutuları ve menü komutları, etkin ayarlarınıza ve ürün sürümüne bağlı olarak Yardım menüsünde açıklanana göre farklılık gösterebilir.Bu yordamlar, genel geliştirme ayarları ile etkin geliştirilmiştir.Ayarlarınızı değiştirmek için Araçlar menüsünden İçeri ve Dışarı Aktarma Ayarları'nı seçin.Daha fazla bilgi için bkz. Visual Studio ayarları.
Denetim C# projeleri için VSProject2 nesnesini kullanmak için
Oluşturma bir Visual Studio kullanarak eklenti projesinin Visual C#.
Üzerinde Proje menüsünde,'ı Add Reference,'ı .net sekmesini VSLangProj, VSLangProj2, VSLangProj80, VSLangProj90 ve VSLangProj100 seçin ve sonra Tamam.
Bilgisayarınızda iki klasör oluşturun:
< yükleme kök >\UserFiles\MyProjects\MyTestProject.
< yükleme kök >\UserFiles\MyKeyFiles.
Bu örnekte, <Yükleme kök> "c:" sürücüsüdür.
Aşağıdaki using ifadelerini Connect.cs dosyasýný dön.
using VSLangProj; using VSLangProj2; using VSLangProj80; using VSLangProj90;
VSLangProj100 kullanma;Aşağıdaki yöntem çağrısı OnConnection yöntemine ekleyin.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; CSVSProj2Manip(_applicationObject); }
CSVSProj2Manip yöntem bildiriminde OnConnection yönteminin hemen altına ekleyin.
public void CSVSProj2Manip(DTE2 dte) { }
Aşağıdaki tanımlamalar yönteminin en üstüne ekleyin.
Solution2 soln = (Solution2)_applicationObject.Solution; String csTemplatePath; String csPrjPath; Project proj; VSProject2 vsproj; String webServiceRef; BuildManager bldMgr;
Use AddFromTemplate oluşturmak için bir Visual C# proje.
Şablonları alma sözdizimi EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "CSharp"), burada adı " WindowsApplication.zip " yer alan WindowsApplication.zip dosyasından alınan < yükleme kök >\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Windows\1033 klasörü. Tüm Visual Studio proje türleri de bu dosyaları bulunabilir < yükleme kök >\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Dil klasörü. "CSharp"Bu proje olduğunu belirtir bir Visual C# proje.
İçin bir Visual Basic sözdizimi Windows Application projesi olan EnvDTE80.Solution2.GetProjectTemplate("WindowsApplication.zip", "VisualBasic"). İçin Visual Basic Windows uygulaması ZIP dosya şablonları içinde bulunan projeleri < yükleme kök >\ Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\VisualBasic\Windows\1033 klasörü.
// Make sure you create the folders that // make up the file path // on your computer. You can replace // this with your own file path. csPrjPath = "C:\\UserFiles\\MyProjects\\MyTestProject"; // Get the project template path for a C# windows // application. csTemplatePath = soln.GetProjectTemplate ("WindowsApplication.zip", "CSharp"); // Create a new windows application by using the // template obtained above. soln.AddFromTemplate(csTemplatePath, csPrjPath, "Test2CSProj", false);
Kullanımını göstermek için aşağıdaki kodu ekleyip VSProject2 yöntemleri.
Program aracılığıyla bir Web servisi projeye eklemek için yer tutucu metnin yerine <web service>, gerçek bir Web servisinin URL'sini içeren kodu. Bir Web servisi URL'sini bulmak için bir proje açın Visual Studio tümleşik geliştirme ortamı (IDE). Üzerinde Proje menüsünü tıklatın Add Web Reference. Üzerinde Add Reference iletişim kutusunu tıklatın UDDI dizin bağlamak ve bir Web hizmeti bulmak için dizini kullanın.
proj = soln.Projects.Item(1); // Cast the project as a VSProject2 object. vsproj = (VSProject2)proj.Object; // Add a reference to System.Security.dll. MessageBox.Show("Adding a reference to System.Security.dll"); // Remove the <version number> in the following path // and replace it with one of the version // number folders that appear // in <installation root>\WINDOWS\Microsoft.NET\Framework // folder vsproj.References.Add ("C:\\WINDOWS\\Microsoft.NET\\Framework\\<version number>\\System.Security.dll"); // Create a Web references folder. MessageBox.Show("Creating a Web references folder."); vsproj.CreateWebReferencesFolder(); // Add a Web reference to the folder. MessageBox.Show("Adding a Web reference."); // Replace the placeholder, <web service>, with a // Web service URL. webServiceRef = "<web service>"; vsproj.AddWebReference(webServiceRef); bldMgr = vsproj.BuildManager; Array monikers = null; // String moniker = null; String msg = null; Object obj = bldMgr.DesignTimeOutputMonikers; if (obj != null) { try { monikers = (System.Array)obj; foreach(String tempmoniker in monikers) { msg += bldMgr.BuildDesignTimeOutput (tempmoniker) + "\n"; } } catch(Exception ex) { MessageBox.Show(ex.Message); } MessageBox.Show("The build design-time output is:" + "\n" + msg); } // Change the MyHTML file name by using GetUniqueFilename. MessageBox.Show("Adding an HTML page named 'MyHTML'..."); String itemTemplatePath = soln.GetProjectItemTemplate("HTMLPage", "CSharp"); proj.ProjectItems.AddFromTemplate (itemTemplatePath, "MyHtml"); MessageBox.Show("Renaming MyHtml' to 'MyTesthtml.htm'..."); vsproj.Project.ProjectItems.Item("MyHtml").Name = vsproj.GetUniqueFilename(proj, "MyTesthtml", "htm"); // Generate a key-pair file. MessageBox.Show("Generating a key-file..."); vsproj.GenerateKeyPairFiles("C:\\UserFiles\\MyKeyFiles \\MyKeyText2.bin", "0");
CSVSProj2Manip yöntemi kullanan VSProject2 itiraz:
System.Security.dll başvurusu kullanarak eklemek References.
Web references klasörünü kullanarak oluşturmak CreateWebReferencesFolder.
Kullanarak bir Web Başvurusu Ekle AddWebReference.
Yapı tasarım zamanı takma üzerinden alınan yöntemleri kullanarak görüntülemek BuildManager özelliği.
Yeni bir proje öðesini kullanarak yeniden adlandırma GetUniqueFilename yöntemi. CSVSProj2Manip yöntemini kullanarak proje öğesi ekler AddFromTemplate.
Bir anahtar çifti dosyasını kullanarak üretmek GenerateKeyPairFiles yöntemi.
Örnek bölüm tüm yöntemi için bir try-catch bloğu da dahil olmak üzere tam kodu listeler.
Eklenti oluşturmak için tıklatın Build Solution , Build menü.
Açık bir Visual C# , proje Visual Studio IDE.
Üzerinde araçları menüsünde tıklatın Add-in Manager, eklentiniz alanından seçin ve Add-In Manager iletişim kutusu. Tıklatın Tamam eklenti çalıştırmak için.
İçinde oluşturulan anahtar çifti dosyasını görüntülemek < yükleme kök >kullanarak \UserFiles\MyKeyFiles klasörüne Sn.exe (güçlü adı aracı).
Örnek
Aşağıdaki örnek bir temel olan Visual Studio oluşturan eklentisi bir Visual C# proje ve özellikleri ve yöntemleri kullanarak yönetir VSProject2 nesne.
using System;
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using System.Windows.Forms;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using VSLangProj90;
using VSLangProj100;
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
CSVSProj2Manip(_applicationObject);
}
public void CSVSProj2Manip(DTE2 dte)
{
try
{
Solution2 soln = (Solution2)_applicationObject.Solution;
String csTemplatePath;
String csPrjPath;
Project proj;
VSProject2 vsproj;
String webServiceRef;
BuildManager bldMgr;
// Make sure you create the folders that make up the file path
// on your computer.
// You can replace this with your own file path.
csPrjPath = "C:\\UserFiles\\MyProjects\\MyTestProject";
// Get the project template path for a C# windows application.
csTemplatePath = soln.GetProjectTemplate
("WindowsApplication.zip", "CSharp");
// Create a new Windows application by using the template
// obtained above.
soln.AddFromTemplate(csTemplatePath, csPrjPath,
"Test2CSProj", false);
proj = soln.Projects.Item(1);
// Get a reference to the VSProject2 object.
vsproj = (VSProject2)proj.Object;
// Add a reference to System.Security.dll.
MessageBox.Show("Adding a reference to System.Security.dll");
// Remove the <version number> in the following path
// and replace it with one of the version
// number folders that appear
// in <installation root>\WINDOWS\Microsoft.NET\Framework
// folder
vsproj.References.Add
("C:\\WINDOWS\\Microsoft.NET\\Framework\\<version number>\\System.Security.dll");
// Create a Web references folder.
MessageBox.Show("Creating a Web references folder.");
vsproj.CreateWebReferencesFolder();
// Replace the placeholder, <web service>, with a
// Web service URL.
MessageBox.Show("Adding a Web reference.");
// Replace the placeholder, <web service>, with a
// Web service URL.
webServiceRef = "<web service>";
vsproj.AddWebReference(webServiceRef);
bldMgr = vsproj.BuildManager;
Array monikers = null;
// String moniker = null;
String msg = null;
Object obj = bldMgr.DesignTimeOutputMonikers;
if (obj != null)
{
try
{
monikers = (System.Array)obj;
foreach(String tempmoniker in monikers)
{
msg += bldMgr.BuildDesignTimeOutput(tempmoniker)
+ "\n";
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
MessageBox.Show("The build design-time output is:" + "\n"
+ msg);
}
// Change the MyHTML file name by using GetUniqueFilename.
MessageBox.Show("Adding an HTML page named 'MyHTML'...");
String itemTemplatePath =
soln.GetProjectItemTemplate("HTMLPage", "CSharp");
proj.ProjectItems.AddFromTemplate(itemTemplatePath, "MyHtml");
MessageBox.Show("Renaming MyHtml' to 'MyTesthtml.htm'...");
vsproj.Project.ProjectItems.Item("MyHtml").Name =
vsproj.GetUniqueFilename(proj, "MyTesthtml", "htm");
// Generate a key-pair file.
MessageBox.Show("Generating a key-file...");
vsproj.GenerateKeyPairFiles
("C:\\UserFiles\\MyKeyFiles\\MyKeyText2.bin", "0");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Imports System
Imports Microsoft.VisualStudio.CommandBars
Imports Extensibility
Imports EnvDTE
Imports EnvDTE80
Imports VSLangProj
Imports VSLangProj2
Imports VSLangProj80
Imports VSLangProj90
Imports VSLangProj100
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
_applicationObject = CType(application, DTE2)
_addInInstance = CType(addInInst, AddIn)
CSVSProj2Manip(_applicationObject)
End Sub
Sub CSVSProj2Manip(ByVal dte As DTE2)
Try
Dim soln As Solution2 = CType(_applicationObject.Solution, _
Solution2)
Dim csTemplatePath As String
Dim csPrjPath As String
Dim proj As Project
Dim vsproj As VSProject2
Dim webServiceRef As String
Dim bldMgr As BuildManager
' Create this or your own file path on your computer.
' The file path must exist before you run this add-in.
csPrjPath = "C:\UserFiles\MyProjects\MyTestProject"
' Get the project template path for a C# windows application.
csTemplatePath = soln.GetProjectTemplate _
("WindowsApplication.zip","CSharp")
' Create a new Windows Application
' using the template obtained above.
soln.AddFromTemplate(csTemplatePath, csPrjPath _
, "Test2CSProj", False)
proj = soln.Projects.Item(1)
' Cast the project to a VSProject2.
vsproj = CType(proj.Object, VSProject2)
' Add a reference to System.Security.dll.
MsgBox("Adding a reference to System.Security.dll")
' Remove the <version number> in the following path
' and replace it with one of the version
' number folders that appear
' in <installation root>\WINDOWS\Microsoft.NET\Framework
' folder
vsproj.References.Add _
("C:\WINDOWS\Microsoft.NET\Framework\<version number>\System.Security.dll")
' Create a Web references folder.
MsgBox("Creating a Web references folder.")
vsproj.CreateWebReferencesFolder()
' Replace the placeholder, <web service>, with a
' web service URL.
webServiceRef = "<web service>"
MsgBox("Adding a Web reference.")
vsproj.AddWebReference(webServiceRef)
bldMgr = vsproj.BuildManager
Dim monikers As String() = Nothing
Dim moniker As String = Nothing
Dim msg As String = ""
Dim obj As Object = bldMgr.DesignTimeOutputMonikers
If Not obj Is Nothing Then
Try
monikers = CType(obj, String())
For Each moniker In monikers
msg &= bldMgr.BuildDesignTimeOutput(moniker) + vbCr
Next
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
MsgBox("The build design-time output is:" + vbCr + msg)
End If
' Use the UniqueFilename to rename a new project item.
MsgBox("Adding an HTML page called 'MyHTML'...")
Dim itemTemplatePath As String = _
soln.GetProjectItemTemplate("HTMLPage", "CSharp")
proj.ProjectItems.AddFromTemplate(itemTemplatePath, "MyHtml")
MsgBox("Renaming MyHtml' to 'MyTesthtml.htm'...")
vsproj.Project.ProjectItems.Item("MyHtml").Name = _
vsproj.GetUniqueFilename(proj, "MyTesthtml", "htm")
' Generate a key-pair file.
vsproj.GenerateKeyPairFiles _
("C:\UserFiles\MyKeyFiles\MyKeyText2.bin", "0")
Catch ex As System.Exception
MsgBox(ex.ToString)
End Try
End Sub
Kod Derleniyor
Bu kodu derlemeye yeni bir oluşturmak Visual Studio eklenti projesi ve örnek kodda OnConnection yönteminin kodu Değiştir. Bir eklenti çalıştırma hakkında daha fazla bilgi için bkz: Nasıl yapılır: denetim Eklenti Yöneticisi'ni kullanarak eklentileri.