簡體   English   中英

Visual Studio項目模板在構建時替換模板中的“ $(SolutionDir)”宏

[英]Visual studio project template replaces “$(SolutionDir)” macro in template on build

我正在嘗試制作一個內部使用的項目模板,該模板包含我們程序集版本控制系統的所有自定義部分。

默認項目模板與我們的構建前和構建后事件完美配合,但是當我嘗試使用$(SolutionDir)宏引用文件時,它將在構建模板時被替換,並且

<ItemGroup>
   <Compile Include="$(SolutionDir)\CommonAssemblyInfo.cs">
      <Link>Properties\CommonAssemblyInfo.cs</Link>
   </Compile>
   <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

當使用項目模板在解決方案中生成項目時,將變成以下內容:

<ItemGroup>
   <Compile Include="..\..\..\..\..\Users\<username>\AppData\Local\Temp\n0u03z2x.gpe\CommonAssemblyInfo.cs">
     <Link>Properties\CommonAssemblyInfo.cs</Link>
   </Compile>
   <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

模板build/package過程可能正在取代它。

我該如何逃脫呢?

Visual Studio項目模板在構建時替換模板中的“ $(SolutionDir)”宏

您應該將導出的項目模板的.vstemplate文件中的CreateInPlace設置為true ,例如<CreateInPlace>true</CreateInPlace>

以下是我的.vstemplate文件:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData>
    <Name>TestDemo</Name>
    <Description>&lt;No description available&gt;</Description>
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType>
    </ProjectSubType>
    <SortOrder>1000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder>
    <DefaultName>TestDemo</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <Icon>__TemplateIcon.ico</Icon>
    <CreateInPlace>true</CreateInPlace>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="TestDemo.csproj" File="TestDemo.csproj" ReplaceParameters="true">
      <ProjectItem ReplaceParameters="true" TargetFileName="Class1.cs">Class1.cs</ProjectItem>
      <Folder Name="Properties" TargetFolderName="Properties">
        <ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
      </Folder>
    </Project>
  </TemplateContent>
</VSTemplate>

詳細步驟:

  1. 導出項目模板,而無需自動將模板導入Visual Studio 在此處輸入圖片說明

  2. 解壓縮導出的文件,將<CreateInPlace>true</CreateInPlace>MyTemplate.vstemplate文件中,然后壓縮所有文件。

  3. 將此文件復制到以下文件夾: C:\\Users\\<Username>\\Documents\\Visual Studio 2017\\Templates\\ProjectTemplates

  4. 重新啟動Visual Studio,使用新的自定義模板創建一個新項目。

    在此處輸入圖片說明

使用此設置,此問題應得到解決。 但是奇怪的是,文檔指出CreateInPlace的默認值為true。

在此處輸入圖片說明

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM