如何处理 SideWaffle 项目模板中的 VSTO 先决条件

How to handle VSTO prerequisites in SideWaffle project template

我正在按照以下视频使用 SideWaffle 构建 VSTO 项目模板:

How to create Visual Studio project templates with TemplateBuilder and SideWaffle

我添加了一个现有的(新的)存根 VSTO 项目,将其设置为不在调试和发布中构建,但是当我按 Ctrl+F5 启动实验性 VS 实例时,我收到以下三个构建错误:

Could not copy the file "c:\users\john\documents\visual studio 2013\Projects\VisioVstoTemplate\VisioVstoTemplate\.NETFramework,Version=v4.5" because it was not found.  VisioVstoVSIX
Could not copy the file "c:\users\john\documents\visual studio 2013\Projects\VisioVstoTemplate\VisioVstoTemplate\Microsoft.VSTORuntime.4.0" because it was not found.   VisioVstoVSIX
Could not copy the file "c:\users\john\documents\visual studio 2013\Projects\VisioVstoTemplate\VisioVstoTemplate\Microsoft.Windows.Installer.4.5" because it was not found. VisioVstoVSIX

所以问题是:

  1. 为什么首先要寻找这些先决条件
  2. 如何防止错误?

(使用 Visual Studio 2013 Ultimate(更新 4)、SideWaffle 1.15 和 TemplateBuilder 1.1.2-beta5)

我很确定我确切地知道这里发生了什么。我从未用 VSTO 项目测试过 SideWaffle/TemplateBuilder。

构建模板时,有一个步骤是使用项目文件中的文件填充 _project.vstemplate.xml 的内容。因此,项目中列出的所有文件如果尚未列出,都将添加到 xml 文件中。这是通过检查 <ItemGroup></ItemGroup> 中列为元素的项目来实现的。例如

<ItemGroup> <Compile Include="App_Start\BundleConfig.cs" /> <Compile Include="App_Start\FilterConfig.cs" /> <Compile Include="App_Start\IdentityConfig.cs" /> </ItemGroup>

有时这些元素指向的项目不是文件,不应被复制。例如。

<ItemGroup> <Reference Include="Microsoft.CSharp" /> <Reference Include="System" /> <Reference Include="System.Data" /> </ItemGroup>

TemplateBuilder 知道哪个是通过 MSBuild 项目的方式 ls-NonFileTypes。此默认值在 https://github.com/ligershark/template-builder/blob/master/tools/ligershark.templates.targets#L75.

的 .targets 文件中定义

很可能 VSTO 项目使用了一些我还没有看到的其他元素名称,应该将其添加到默认列表中。

如何解决它

查看项目文件并检查 ItemGroup 下的元素名称以及那些在 Include 属性中没有文件路径的元素(如果它们尚未列出)in the default list 这是个问题。

在安装了 TemplateBuilder 的项目中,Properties\template-builder.props 处有一个新的 props 文件。一旦确定应在项目中过滤哪些项类型,就可以将其添加到该文件中。例如。

<ItemGroup> <ls-NonFileTypes Include="Service;BootstrapperPackage;"/> </ItemGroup>

或者您也可以将其声明为(它们是等效的)

xml <ItemGroup> <ls-NonFileTypes Include="Service"/> <ls-NonFileTypes Include="BootstrapperPackage"/> </ItemGroup>

SideWaffle 也使用这个 https://github.com/ligershark/side-waffle/blob/master/TemplatePack/Properties/template-builder.props#L30