Visual Studio 项目模板支持新的 csproj 格式

Visual Studio Project Template Support for new csproj format

我正在 Visual Studio 2019 年创建一些模板,以使用新的 .csproj 格式(基于 SDK 属性),我 运行一个问题。

通常,如果您想在模板中包含一个文件,您将其添加到 .vstemplate 中:

  <TemplateContent>
    <Project File="ProjectTemplate.csproj" ReplaceParameters="true">
      <ProjectItem ReplaceParameters="true" TargetFileName="$classprefix$Config.cs">ProjectTemplateConfig.cs</ProjectItem>
    </Project>
  </TemplateContent>

并在 .csproj 中:

<ItemGroup>
    <Compile Include="$classprefix$Config.cs" />
</ItemGroup>

一切正常。

但是,我正在尝试使用新格式 在 .csproj 中包含单个文件,它会自动选取项目文件夹中的所有文件。

但是当我从 csproj 中删除 <Compile> 标签时,模板不再复制文件。

我什至在使用 IWizard,我可以看到 Visual Studio 对 IWizard.ShouldAddProjectItem(string) 的调用,而我 return true,但是它不会添加它。

使用 WPF 时需要更加极端,如果您添加第二个 <Page> 标记,编译器实际上会抛出错误。

Visual Studio 模板是否支持新的 .csproj 格式?如果是这样,我怎样才能让它复制文件,而不管它们是否存在于 .csproj 文件中?

Do Visual Studio templates support the new .csproj format? And if so, how can I have it copy files regardless of their presence in the .csproj file?

其实,VS目前不支持新建sdk格式工程的工程模板

实际上,VS2019 只有 Net Framework 项目模板可用于创建旧的 sdk 格式项目。而如果像你的情况那样简单的将此类工程中的xxxx.csproj文件修改成新的sdk格式,但是模板工程本身的框架还是net framework(simply migrating the old sdk format to the new sdk format still has various compatibility issues) ,因此,最终模板仍然适用于网络框架项目而不是 net core/net standard 项目。

作为建议,

我建议您可以创建一个新的 sdk 格式项目,根据需要进行一些需求更改,然后使用 VS UI 选项 Export Project Template 导出此类新的 sdk 格式项目,我认为这将效果不错。

此外,如果您仍想创建适用于新 sdk 格式项目的项目模板,我们建议您可以 post 在 our User Voice forum(DC)----suggest a feature分享您的想法,团队会认真考虑您的想法,给您满意的答复。