在Visual Studio项目模板中添加引用?

时间:2017-10-10 18:08:39

标签: visual-c++ visual-studio-2015 project-template

我正在为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,则会发生。

2 个答案:

答案 0 :(得分:1)

在我的情况下,我在主项目中有2个项目引用。它在Visual Studio 2019 Net Core 3中对我有用,作为@skaddy答案,但在几次Visual Studio重新启动并最终计算机重新启动(很糟糕)之后才起作用。

区别在于我不在乎GUID ,我只是让Visual Studio在乎。

步骤

  1. 在解决方案模板中,我将Root.vstemplate设置为CopyParameters =“ true”
    <ProjectTemplateLink ProjectName="$safeprojectname$.API" CopyParameters="true">
        APITemplate\MyTemplate.vstemplate
    </ProjectTemplateLink>
  1. 我确保主项目模板中存在ReplaceParameters =“ true”(自开始以来)。
    <TemplateContent>
        <Project TargetFileName="APITemplate.csproj" File="APITemplate.csproj" ReplaceParameters="true">
            ...
        <\Project>
        ...
    <\TemplateContent>
  1. 在主.csproj文件中,我查看引用并使用参数对其进行更改

从这里

    <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结合使用对我来说很有用