0

我正在使用 Visual Studio 2012 处理 TFS 项目。我当前的项目集合中有两个项目,两个项目之一的工作区映射到C:\Workspace\ProjectA

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

4

2 回答 2

2

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

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

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

一旦你有了它,你就可以使用 Common.targets 来覆盖你想要的任何 csproj 属性。例如,要覆盖 OutputPath,您需要:

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

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

于 2013-09-23T15:27:37.503 回答
0

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

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

看看这篇文章了解更多细节:Absolute VS Relative

于 2013-09-20T19:39:23.020 回答