基于 TFS 项目工作区设置项目输出目录



我正在Visual Studio 2012中处理TFS项目。我当前的项目集合中有两个项目,其中一个项目的工作区映射到C:WorkspaceProjectA

在此项目中,我有一个解决方案文件,其中包含不同文件夹深度的多个 .csproj 文件。我想做的是将这些 .csproj 项目设置为将其Properties > Build > Output > Output path属性设置为 C:WorkspaceProjectAbinDebug但我不想使用硬编码路径,我想像%CurrentProjectDirectory%binDebug一样设置它。有没有一种简单的方法可以做到这一点,就像使用某些现有环境或注册表变量一样?

听起来你正在尝试管理一个大型项目。在这种情况下,您希望有一个所有项目都导入的 Common.targets 文件,然后您可以通过直接编辑它来更改此类内容。将 Common.targets 放在团队项目工作区的根目录 ( C:WorkspaceProjectA ),然后通过添加以下内容将其导入到每个 .csproj 中:

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)', 'Common.targets'))Common.targets" />

。就在像这样的行之前 <Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets"> ,因为您希望您的更改影响那里的内容。

一旦有了这个,你就可以使用 Common.targets 来覆盖你想要的任何 csproj 属性。例如,要覆盖输出路径,您需要:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <OutputPath>My_output_path</OutputPath>
  </PropertyGroup>
</Project>

注意:最终,我发现我希望一些 Common.targets 的东西在常规<Import>之后生效。因此,从所有csproj中删除了所有这些<Import>,并将它们移动到Common.target。

使用相对文件路径而不是硬编码来更新所有这些 .csproj 文件的输出路径。

像 ....\projectA\bin\debug ,"..\" 将根据各个项目的文件夹结构而有所不同。

查看

本文以获取更多详细信息: 绝对 VS 相对

最新更新