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

时间:2015-01-13 14:27:52

标签: visual-studio-2013 vsto vsix sidewaffle

我根据以下视频制作了一个带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. 如何防止错误?
  3. (使用Visual Studio 2013 Ultimate(更新4),SideWaffle 1.15和TemplateBuilder 1.1.2-beta5)

1 个答案:

答案 0 :(得分:1)

我很确定我确切知道这里发生了什么。我从未使用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处有一个新的道具文件。确定应在项目中过滤哪些项目类型后,可以将其添加到该文件中。例如。

<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