3

我爲.net核心應用程序創建了一個visual studio項目模板。使用此模板創建新項目時,我希望能夠在Azure身份驗證和身份驗證之間進行選擇。爲了達到這個目的,我創建了一個嚮導。根據嚮導上選定的選項,項目中必須包含一些附加文件。我的問題是,我不知道如何將這些額外的文件添加到我的項目。如何以編程方式將文件添加到Visual Studio模板?

1日法

起初,我創建了一個項目模板,並試圖把它的內容添加到我的項目。

AzureAuthentication.vstemplate

<VSTemplate> 
    <TemplateData> 
     <!-- code removed for clarity --> 
    </TemplateData> 
    <TemplateContent> 
     <Folder Name="Models" TargetFolderName="Models"> 
      <ProjectItem ReplaceParameters="true" TargetFileName="RefreshTokenResponse.cs">RefreshTokenResponse.cs</ProjectItem> 
     </Folder> 
     <Folder Name="Controllers" TargetFolderName="Controllers"> 
      <ProjectItem ReplaceParameters="true" TargetFileName="UserController.cs">UserController.cs</ProjectItem> 
     </Folder> 
    </TemplateContent> 
</VSTemplate> 

WizardImplementation.cs

public class WizardImplementation : IWizard { 
    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) { 
     dte = automationObject as DTE; 

     // code removed for clarity 
    } 

    public void ProjectFinishedGenerating(Project project) { 
     switch (authenticationType) { 
      default: break; 
      case AuthenticationType.Azure: { 
        // code removed for clarity 

        using (StreamWriter writer = File.CreateText("C:/Users/pasjiannis.OFFICE/Desktop/log.txt")) { 
         dte.Solution.AddFromTemplate(templatePath, projectPath, "AzureAuthentication"); 
        } 

        break; 
       } 
      case AuthenticationType.Identity: { 
        break; 
       } 
     } 
} 

這種方法不會在所有的工作。

第二個方法

然後我轉換從項目模板到項目模板我的模板。

AzureAuthentication.vstemplate

<VSTemplate> 
    <TemplateData> 
     <!-- code removed for clarity --> 
    </TemplateData> 
    <TemplateContent> 
     <Project File="AzureAuthentication.csproj" ReplaceParameters="true"> 
      <Folder Name="Models" TargetFolderName="Models"> 
       <ProjectItem ReplaceParameters="true" TargetFileName="RefreshTokenResponse.cs">RefreshTokenResponse.cs</ProjectItem> 
      </Folder> 
      <Folder Name="Controllers" TargetFolderName="Controllers"> 
       <ProjectItem ReplaceParameters="true" TargetFileName="UserController.cs">UserController.cs</ProjectItem> 
      </Folder> 
     </Project> 
    </TemplateContent> 
</VSTemplate> 

這部分工作。這些文件已成功添加到我的項目中,但我的解決方案中也創建了另一個項目。

3方法

而是在我WizardImplementation類使用AddFromTemplate的方法,我試圖訪問我的項目,得到了其項目項,並添加新的項目有這樣

dte.Solution.Projects.Items(0).ProjectItems.AddFromFile("UserController.cs"); 

但是我的項目上的ProjectItems爲null。

我在這裏錯過了什麼?我的任何方法是否正確或者是否有更好的方法來實現這個目標?

回答

0

我想通了我的第三種方法。我錯過了dte.Solution.Projects.Items(0)給我包含我的項目的文件夾,而不是項目本身的事實。

所有我必須做的是改變:

dte.Solution.Projects.Items(0).ProjectItems.AddFromFile("UserController.cs");

dte.Solution.Projects.Items(0).SubProject.ProjectItems.AddFromFile("UserController.cs");

相關問題