【发布时间】:2014-09-10 00:54:29
【问题描述】:
为了根据我的配置更新我的引用,我通过添加一个属性并更改所有引用以使用它来调整我的 .csproj 文件,如下所示:
<PropertyGroup>
<ReferencePath Condition=" '$(Configuration)' == 'Release'">foo\release\1.0.0.9\bin\</ReferencePath>
<ReferencePath Condition=" '$(Configuration)' == 'Debug'">bar\debug\</ReferencePath>
</PropertyGroup>
<Reference Include="BasicControls, Version=5.0.53.0, Culture=neutral, PublicKeyToken=25ad4b03c913ffff, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>$(ReferencePath)\BasicControls.dll</HintPath>
</Reference>
出现问题并阻止更改传播。我对 .csproj 文件所做的任何操作都不会更改引用的路径 - 无论我做什么,右键单击引用并在属性中查看它的路径都会显示它在我开始编辑文件之前显示的相同路径。
- 我已尝试卸载并重新加载项目
- 我已尝试将配置从 Debug 更改为 Release
- 我已经打开和关闭了解决方案
- 解决方案关闭时,我删除了 .suo 文件。
- 我在解决方案资源管理器上单击了重新加载。
.csproj 中的所有引用都使用 $(ReferencePath) 设置,而我的 ReferencePaths 都不使用原始路径。
我错过了什么?是不是我使用属性的方式有问题?
【问题讨论】:
-
可能 ReferencePath 是 MsBuild 本身在某处使用的属性,所以我会给它一个自定义名称以确保。退出VS,添加一个目标来显示
<Target Name="ShowRefPath" BeforeTargets="Build"> <Message Text="$(MyRefPath)"/></Target>之类的路径,启动VS,构建并检查它打印的内容?我不能 100% 确定即使 VS 显示的路径是错误的,构建也会使用它.. -
感谢您的想法。我认为我的部分问题是我正在关闭解决方案而不是 VS。现在,当我关闭 VS、删除 suo 并重新打开 VS 时,我会看到所做编辑的效果。似乎 ReferencePath 可能是保留字,请参见例如codeproject.com/Articles/184718/… 。但是当我使用 MyRefPath 概念时,路径没有正确加载。我仍在努力弄清楚如何让我的改变做我想做的事。我尝试使用您的 Target 作为调试手段,但从未看到任何输出。
-
但没有看到任何输出只有在 MyRefPath 属性为空时才会出现这种情况(或者也没有行
ShowRefPath:表示目标甚至没有被调用?)将文本更改为"MyRefPath = $(MyRefPath)"并添加Importance="high",因此您至少应该看到MyRefPath =部分。检查命令行可能是为了确保它被使用。 -
你说得对,我没有调用目标。我需要开始将其视为一个 Msbuild 文件,而不是“Visual Studio 的项目文件”。我对 MsBuild 不是很有经验(尽管很久以前我在 makefile 方面表现不错)。如果我不知道如何调用目标,我会请你用勺子喂我。
-
本来想说 wiki 没问题,你比我强
标签: .net visual-studio-2012 msbuild csproj msbuild-propertygroup