【发布时间】:2020-01-22 16:11:29
【问题描述】:
我设置了一个多项目模板,其中包含 2 个 .NET Core 项目(ProjA.csproj 和 UnitTests.csproj)。每个都包含在自己的文件夹中,并带有自己对应的 vstemplate(分别为 ProjA.vstemplate 和 UnitTests.vstemplate),我有一个 root.vstemplate 将它们捆绑在一起。 UnitTests 项目包含对 ProjA 的项目引用。我的文件夹结构如下:FolderStructure
我设置了一个 vsix 安装程序,它接收压缩后的内容,安装后一切正常,几乎可以。我不知道如何将 UnitTests 项目中的项目引用重命名为用户指定的项目名称。我已经尝试过 $safeprojectname$,但这会产生“UnitTests”,因为它是在该项目的上下文中。我已经通过所有默认参数无济于事。我需要的是“masterprojectname”之类的东西。我尝试使用 customParameter(请参阅下面的 Root.vstemplate),但这也不起作用。
这是我的 UnitTests.csproj 内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<IsPackable>false</IsPackable>
<RootNamespace>UnitTests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.0.0" />
<PackageReference Include="Moq" Version="4.12.0" />
<PackageReference Include="nunit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.11.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ProjA\ProjA.csproj" />
<!-- I've tried the following but it yields "UnitTests": -->
<!-- <ProjectReference Include="..\$safeprojectname$\$safeprojectname$.csproj" /> -->
<!-- Also tried the following with a customParameter in Root.vstemplate, but it didn't work -->
<!-- <ProjectReference Include="..\$parentproject$\$parentproject$.csproj" /> -->
</ItemGroup>
</Project>
这是我的 UnitTests.vstemplate:
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
<Name>UnitTests</Name>
<Description>Creates a standard UnitsTest project</Description>
<ProjectType>CSharp</ProjectType>
<SortOrder>110</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>UnitTests</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<CreateInPlace>true</CreateInPlace>
<Hidden>true</Hidden>
</TemplateData>
<TemplateContent>
<Project TargetFileName="UnitTests.csproj" File="UnitTests.csproj" ReplaceParameters="true">
<Folder Name="Business" TargetFolderName="Business">
<ProjectItem ReplaceParameters="true" TargetFileName="TestsTemplate.cs">TestsTemplate.cs</ProjectItem>
</Folder>
</Project>
</TemplateContent>
</VSTemplate>
这是我的 Root.vstemplate:
<VSTemplate Version="3.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>MessageListener Template (.NET Core)</Name>
<Description>Creates a boilerplate MessageListener</Description>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>Console</ProjectSubType>
<SortOrder>10</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>REDACTED</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>CS.png</Icon>
<LanguageTag>C#</LanguageTag>
<PlatformTag>Linux</PlatformTag>
<PlatformTag>macOS</PlatformTag>
<PlatformTag>Windows</PlatformTag>
<ProjectTypeTag>Console</ProjectTypeTag>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="$safeprojectname$">
ProjA\ProjA.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="UnitTests">
UnitTests\UnitTests.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
<CustomParameters>
<CustomParameter Name="$parentproject$" Value="$safeprojectname$" />
</CustomParameters>
</TemplateContent>
</VSTemplate>
【问题讨论】: