如何处理 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
所以问题是:
- 为什么首先要寻找这些先决条件
- 如何防止错误?
(使用 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。
我正在按照以下视频使用 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
所以问题是:
- 为什么首先要寻找这些先决条件
- 如何防止错误?
(使用 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.
很可能 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。