我有一个Visual Studio 2010项目,其中引用了一些第三方组件。它们的程序集随附有XML文档文件,这些文件对我们(仅我们)开发人员有用。并且无论何时构建项目(在Debug或Release模式下),这些XML文件都将被复制到build目录。
在Visual Studio中或通过MSBuild,我似乎找不到设置或开关来禁用将这些XML文件复制到构建目录的功能。生成后脚本可能是一个选择,但是很臭。有任何想法吗?谢谢。
我有一个Visual Studio 2010项目,其中引用了一些第三方组件。它们的程序集随附有XML文档文件,这些文件对我们(仅我们)开发人员有用。并且无论何时构建项目(在Debug或Release模式下),这些XML文件都将被复制到build目录。
在Visual Studio中或通过MSBuild,我似乎找不到设置或开关来禁用将这些XML文件复制到构建目录的功能。生成后脚本可能是一个选择,但是很臭。有任何想法吗?谢谢。
Answers:
生成项目时,.xml / .pdb文件是通过ResolveAssemblyReference任务收集的。调用ResolveAssemblyReference时,将传递相关文件的文件扩展名列表。该文件扩展名列表在MSBuild属性AllowedReferenceRelatedFileExtensions中捕获。默认情况下,该列表将包含“ .pdb; .xml”。
如果要排除所有相关参考文件,则只需将该属性的值覆盖为相关文件将不具有扩展名的内容。例如,您可以将AllowedReferenceRelatedFileExtensions设置为“-”。
您还可以自定义返回的文件列表。如果只想查找.pdb文件,则需要传递AllowedReferenceRelatedFileExtensions=".pdb"
。在这种情况下,任何在.dll / .exe旁边具有.pdb文件的引用也将被复制。您还可以使用它来复制其他可能不会以.pdb / .xml结尾的相关文件。例如,如果您有一个名为MyAssembly.dll的引用程序集,并且在同一文件夹中存在MyAssembly.pdb和MyAssembly.foo(如果设置),AllowedReferenceRelatedFileExtensions=".pdb;.foo"
则.pdb和.foo文件都将被复制到输出目录。
AllowedReferenceRelatedFileExtensions
?
Visual Studio项目文件具有与任何msbuild文件相同的格式。因此,如果配置名称为“ Release”,则可以手动将条件添加到相应的部分中,以不复制xml文件。
它应该在改变
<ItemGroup>
至
<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">
或类似的东西。
set MSBuildEmitSolution=1
或通过属性参数(p:msbuildemitsolution=1
)。
如果.xml / .pdb标记为构建动作“内容”(等),则可以将其更改为“无”。您还应该确保它们的copy-to-build-output为false。
两者都设置好了吗?
将XML文件复制到发行版本中的文件夹中有什么问题?在我看来,这很好,并且真正的问题是与拾取文件并将其放入安装程序的代码有关。我认为从您自己的bin \ release文件夹中提取第三方dll不是一个好习惯。我会让安装程序从源代码树中的第三方文件夹中提取第三方dll。
该设置位于相关项目的属性中,在“构建”选项卡下,取消选中“ XML文档文件”。它也是。* proj文件中<DocumentationFile>
适用<PropertyGroup>
于您的构建配置的MSBuild属性。