Visual studio 2010 MSBuild项目与解决方案的相对路径
我有许多项目都加入到解决方案中。每个项目都有自己的目录结构,csproj文件位于文件夹结构的不同级别。 每个csproj都指定了OutputPath属性。OutputPath-是一个相对路径,它因项目而异,因此所有项目都具有相同的输出目录。 如果我建立一个单独的项目,这是可行的。但如果我尝试构建解决方案文件,一切都会发生变化。在这种情况下,每个项目输出文件夹都不同(取决于该项目输出路径中的“..\”数量) 我知道,在某个时刻之前,一切都很顺利。没有人更改build.cmd或任何sln或csproj文件。但现在我有上述情况 所以我的问题是-什么影响相对路径的计算?我的意思是如何强制从特定项目的csproj文件所在的文件夹开始计算相对输出路径。不是来自.sln文件所在的文件夹Visual studio 2010 MSBuild项目与解决方案的相对路径,visual-studio-2010,msbuild,Visual Studio 2010,Msbuild,我有许多项目都加入到解决方案中。每个项目都有自己的目录结构,csproj文件位于文件夹结构的不同级别。 每个csproj都指定了OutputPath属性。OutputPath-是一个相对路径,它因项目而异,因此所有项目都具有相同的输出目录。 如果我建立一个单独的项目,这是可行的。但如果我尝试构建解决方案文件,一切都会发生变化。在这种情况下,每个项目输出文件夹都不同(取决于该项目输出路径中的“..\”数量) 我知道,在某个时刻之前,一切都很顺利。没有人更改build.cmd或任何sln或cspro
Let's assume I have following directory structure:
dir1
a.sln
dir2
a.csproj
dir21
dir3
b.csproj
a、 csproj的输出路径设置为“../../\u bin”,如果从.csproj文件夹中计数,则该路径刚好高于dir1
b、 csproj的输出路径设置为“../../../../\u bin”,这是相同的-如果从b.csproj计算,则大约为dir1
a、 sln同时包含-a.csproj和b.csproj
当我运行msbuild时,我得到一个到“dir1/../../../../\u-bin”的项目生成和一个到“dir1/../../../../../\u-bin”的项目生成-项目文件的两个相对路径都是从解决方案文件位置开始计算的,而不是从项目文件开始计算的。
导入项目中的相对路径是相对于
导入项目的目录。因此,如果项目文件是
导入到不同位置的多个项目文件中时
将解释导入的项目文件中的相对路径
对于每个导入的项目都有不同的定义
与项目文件相关的所有MSBuild保留属性,例如MSBuildProjectDirectory
以及导入项目中引用的MSBuildProjectFile
基于导入项目文件指定的值
若你们在你们的问题中加入更多的细节或者很少的样本,那个么你们就更容易理解确切的问题了
编辑:
好吧,让我们试着找出那个谜团。首先,OutputPath可能会受到环境变量的影响
第二个-在生成期间,sln文件转换为msbuild项目文件格式并存储在临时文件中。如果在cmd“set msbuildemitsolution=1”中执行,然后通过命令行触发生成,则可以获取该临时文件。在那里,您可以检查该文件并查看您的单个项目是如何调用的。但我想您将看到多个.csproj/>条目。以及该调用继承的全局msbuild属性
所以我怀疑在某一点之前是否一切都很好,并且并没有做任何更改—您缺少OutputPath环境变量或其他有助于构建OutputPath的变量
顺便说一句,我认为如果您想通过强制使用相对目录来解决问题,还可以使用$(MSBuildProjectDirectory)。这是msbuild保留属性之一(从),但这将要求您调整每个csproj文件中的OutputPath。就我个人而言,我更愿意避免这种情况,因为它可能会影响其他一些目标,并带来一些微妙的问题。好吧,我能够找到导致这种情况的原因。这是custom.targets文件,它在任何msbuild的开始处推断SolutionDir属性。
我确实通过使用MSBuild资源管理器发现了这一点。该工具在我的情况下非常有用-我不知道我的系统上有第三方.target文件。不确定导入的项目是什么意思,但在我的情况下,所有相对路径都是相对于解决方案文件目录进行解释的。我不知道如何改变这一点……谢谢你们的帮助,但我解决了这个问题,并在我自己的回答中提到了这一点。不过还是要感谢大家的参与+1000我有相同的根本原因(覆盖$(OutputPath)),但有非常不同的问题(*.designer.cs文件已停止重新生成)-在5分钟内通过MSBuild Explorer进行诊断。