为.NET Standard 2.0创建新的类库模板不会复制源文件

时间:2018-04-20 13:21:28

标签: c# templates visual-studio-2017 .net-standard

使用自动.Net Standard工具在VS2017 2.0中为类库创建新模板时会出现此问题。从该模板创建新项目时,不会复制源文件(.cs)。

虽然我需要复杂的模板,但会使用最简单的情况来解释问题。

创建新模板:VS2017中的新项目,选择类库.NET Standard。使用此“空”项目,创建模板,单击Project>Export Template> chose the created project, and then finish.

从最近创建的模板创建新项目:添加新项目,选择新模板,然后接受。

生成的新项目没有该项目的源文件(.cs)。

这显然是一个问题,因为对.NET Framework的类库做同样的工作正常。

Classlibrary1.csproj

<Project Sdk="Microsoft.NET.Sdk">  
  <PropertyGroup>    
    <TargetFramework>netstandard2.0</TargetFramework>  
  </PropertyGroup>
</Project>

MyTemplate.vstemplate

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
  <Name>ClassLibrary1</Name>
  <Description>&lt;No description available&gt;</Description>
  <ProjectType>CSharp</ProjectType>
  <ProjectSubType>
  </ProjectSubType>
  <SortOrder>1000</SortOrder>
  <CreateNewFolder>true</CreateNewFolder>
  <DefaultName>ClassLibrary1</DefaultName>
  <ProvideDefaultName>true</ProvideDefaultName>
  <LocationField>Enabled</LocationField>
  <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
  <Icon>__TemplateIcon.ico</Icon>
</TemplateData>
<TemplateContent>
  <Project TargetFileName="ClassLibrary1.csproj" File="ClassLibrary1.csproj" ReplaceParameters="true">
    <ProjectItem ReplaceParameters="true" TargetFileName="Class1.cs">Class1.cs</ProjectItem>
  </Project>
</TemplateContent>
</VSTemplate>

我尝试了不同的“解决方案”,但它们对我不起作用。 https://developercommunity.visualstudio.com/content/problem/37226/new-project-missing-files-from-exported-project-te.html

https://github.com/dotnet/standard/issues/605

1 个答案:

答案 0 :(得分:2)

当您创建新模板时,Visual Studio会将其保存在C:\Users\User\Documents\Visual Studio 2017\Templates\中,但也会保存在C:\Users\User\Documents\Visual Studio 2017\My Exported Templates\中,但Visual Studio仅从\ Templates中读取模板。

问题是默认情况下,模板 CreateInPlace 的参数应为true。但对于.Net Standard,您必须设置值。为此,请转到文件夹\Templates\,找到模板并解压缩,删除zip。打开模板文件并添加值:

MyTemplate.vstemplate
  ....
  <Icon>__TemplateIcon.ico</Icon>
  <CreateInPlace>true</CreateInPlace>
</TemplateData>
....

它应该已经有用了。不要再尝试压缩模板,也不能从zip中正确读取。

如果有人有更好的答案,请分享。