Visual studio 项目模板替换了构建模板中的“$(SolutionDir)”宏
Visual studio project template replaces "$(SolutionDir)" macro in template on build
我正在尝试制作一个供内部使用的项目模板,其中包含我们程序集版本控制系统的所有自定义部分。
默认项目模板与我们的预构建和 post-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 project template replaces “$(SolutionDir)” macro in template on build
你应该在导出的项目模板的.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><No description available></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>
详细步骤:
导出项目模板不用自动将模板导入Visual Studio:
解压缩导出的文件,将<CreateInPlace>true</CreateInPlace>
添加到MyTemplate.vstemplate
文件中,并压缩所有文件。
将此文件复制到文件夹:C:\Users\<Username>\Documents\Visual Studio 2017\Templates\ProjectTemplates
重新启动您的 Visual Studio,使用新的自定义模板创建一个新项目。
使用此设置,应该可以解决此问题。但奇怪的是,文档指出 CreateInPlace
的默认值为 true。
希望这对您有所帮助。
我正在尝试制作一个供内部使用的项目模板,其中包含我们程序集版本控制系统的所有自定义部分。
默认项目模板与我们的预构建和 post-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 project template replaces “$(SolutionDir)” macro in template on build
你应该在导出的项目模板的.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><No description available></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>
详细步骤:
导出项目模板不用自动将模板导入Visual Studio:
解压缩导出的文件,将
<CreateInPlace>true</CreateInPlace>
添加到MyTemplate.vstemplate
文件中,并压缩所有文件。将此文件复制到文件夹:
C:\Users\<Username>\Documents\Visual Studio 2017\Templates\ProjectTemplates
重新启动您的 Visual Studio,使用新的自定义模板创建一个新项目。
使用此设置,应该可以解决此问题。但奇怪的是,文档指出 CreateInPlace
的默认值为 true。
希望这对您有所帮助。