我正在为VS2015创建一个多项目模板,其中一个创建的项目引用另一个。如何使用模板添加引用?
如果我使用VS GUI添加引用,它会将以下内容添加到.vcxproj文件中:
<ItemGroup>
<ProjectReference Include="path\xyz.vcxproj">
<Project>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</Project>
</ProjectReference>
GUID是有效的,因为VS知道引用项目的GUID。当我从模板创建新项目时,我不知道将为新创建的项目选择什么GUID,因此我无法使用模板参数添加有效的GUID。我可以很容易地正确添加Include="..."
部分,但我没有。我们没有。
我也无法在<ProjectReference>
标记上找到太多信息,但似乎需要有效的GUID,而<Project>
标记不会导致引用不起作用,并且相同如果我使用全零值GUID,则会发生。
答案 0 :(得分:1)
在我的情况下,我在主项目中有2个项目引用。它在Visual Studio 2019 Net Core 3中对我有用,作为@skaddy答案,但在几次Visual Studio重新启动并最终计算机重新启动(很糟糕)之后才起作用。
区别在于我不在乎GUID ,我只是让Visual Studio在乎。
步骤
<ProjectTemplateLink ProjectName="$safeprojectname$.API" CopyParameters="true">
APITemplate\MyTemplate.vstemplate
</ProjectTemplateLink>
<TemplateContent>
<Project TargetFileName="APITemplate.csproj" File="APITemplate.csproj" ReplaceParameters="true">
...
<\Project>
...
<\TemplateContent>
从这里
<ItemGroup>
<ProjectReference Include="..\Data\Data.csproj"/>
<ProjectReference Include="..\Service\Service.csproj"/>
</ItemGroup>
对此
<ItemGroup>
<ProjectReference Include="..\$ext_safeprojectname$.Data\$ext_safeprojectname$.Data.csproj"/>
<ProjectReference Include="..\$ext_safeprojectname$.Service\$ext_safeprojectname$.Service.csproj"/>
</ItemGroup>
同样,对我来说,参数仅在机器重启后才起作用。
答案 1 :(得分:0)
您可以在解决方案模板中生成GUID,并将它们传递给项目。因此,您需要解决方案模板中ProjectTemplateLink中的参数CopyParameters。 示例:
<ProjectTemplateLink ProjectName="$safeprojectname$.Data" CopyParameters="true">
您的项目模板必须替换参数
<Project TargetFileName="Data.vbproj" File="Data.vbproj" ReplaceParameters="true">
现在,您可以从项目文件中的解决方案模板访问参数并设置外部guid参数(请注意,外部参数的访问权限带有“ $ ext _”)
<ProjectGuid>{$ext_guid1$}</ProjectGuid>
对于具有引用的项目,请在ItemGroup中使用ProjectReference
<ItemGroup>
<ProjectReference Include="..\$ext_safeprojectname$.Data\$ext_safeprojectname$.Data.vbproj">
<Project>{$ext_guid1$}</Project>
<Name>$ext_safeprojectname$.Data</Name>
</ProjectReference>
</ItemGroup>
将Visual Studio 2017与.NET Framework 4.5.2结合使用对我来说很有用