我有一个包含多个项目的.sln文件。为了简单起见,我们称之为......
...其中A是引用B和C的主项目。我的目标是更新我的构建脚本以生成ProjectA的XML“Intellisense”文档文件,而不提供有关B和C中缺少文档的构建警告。
我有一个MSBuild脚本,在构建步骤中包含以下内容:
<PropertyGroup>
<CustomOutputPath>C:\build\output\</CustomOutputPath>
</PropertyGroup>
<ItemGroup>
<Projects Include="ProjectA\ProjectA.csproj">
<Properties>OutputPath=$(CustomOutputPath)</Properties>
</Projects>
</ItemGroup>
<MSBuild Projects="@(Projects)" />
(ItemGroup中实际列出了多个项目,但同样,让我们保持这个简单。)
当我运行构建脚本时,它足够聪明,可以为我编译B,C和A,即使我只指定了A.所有输出都出现在“CustomOutputPath”位置。
如果我将“DocumentationFile”属性添加到我的项目条目...
<ItemGroup>
<Projects Include="ProjectA\ProjectA.csproj">
<Properties>OutputPath=$(CustomOutputPath);DocumentationFile=ProjectA.xml</Properties>
</Projects>
</ItemGroup>
...然后'ProjectA.xml'出现在“CustomOutputPath”中。但是,我还在项目文件夹中为所有三个项目获取了名为“ProjectA.xml”的文件:
这些文件包含各自项目的“Intellisense”文档,即使它们都被命名为“ProjectA.xml”。
这会在项目文件夹中创建不受欢迎且误导性命名的文件,并且(更重要的是)会为B和C中缺少的文档注释生成构建警告。我不想为这些项目添加文档注释,所以我'我希望找到一种让MSBuild仅为ProjectA生成文档的方法。
任何人都可以提供任何见解或替代解决方案吗?
答案 0 :(得分:1)
根据我发现的内容 - DocumentationFile是一个全局级属性(将用于创建DocFileItem - 全局级项目列表)。根据我的理解,你将无法在一个逻辑脚本中以任何简单的方式改变它。
您可以做的是在单独的文件中定义特殊目标,该文件将导入到每个proj文件(直接编辑proj文件或使用$ CustomBeforeMicrosoftCommonTargets等属性),这些属性将使用与项目相关的值覆盖DocumentationFile。 因此,您可能可以为不同的项目生成不同的文档文件名。
另一种解决方案 - 只需在构建完所有项目之后清理所有不必要的doc文件。