Visual Studio项目模板在构建模板中替换“$(SolutionDir)”宏

时间:2018-01-15 14:14:29

标签: visual-studio templates msbuild csproj visual-studio-templates

我正在尝试制作一个供内部使用的项目模板,其中包含我们的程序集版本控制系统的所有自定义部分。

默认项目模板与我们的预构建和后构建事件完美配合,但当我尝试使用$(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进程可能正在取代它。

如何逃避它?

1 个答案:

答案 0 :(得分:2)

  

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 enter image description here

  2. 解压缩导出的文件,将<CreateInPlace>true</CreateInPlace>添加到MyTemplate.vstemplate文件中,并压缩所有文件。

  3. 将此文件复制到文件夹:C:\Users\<Username>\Documents\Visual Studio 2017\Templates\ProjectTemplates

  4. 重新启动Visual Studio,使用新的自定义模板创建一个新项目。

    enter image description here

  5. 使用此设置,应解决此问题。但奇怪的是文档声明CreateInPlace的默认值为真。

    enter image description here

    希望这有帮助。