我正在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 相对