我有许多项目加入了一个解决方案。每个项目都有自己的目录结构,csproj 文件位于不同级别的文件夹结构中。
每个 csproj 都指定了 OutputPath 属性。 OutputPath - 是一个相对路径,它因项目而异,因此所有项目都具有相同的输出目录。
如果我构建一个单独的项目就可以了。但是如果我尝试构建解决方案文件,一切都会改变。在这种情况下,每个项目输出文件夹都不同(取决于该项目的 OutputPath 中的多个“..\”)。
我确实知道,在一段时间之前一切正常。没有人更改 build.cmd 或任何 sln 或 csproj 文件。但现在我有上述情况。
所以我的问题是 - 什么影响相对路径的评估方式?我的意思是如何强制从该特定项目的 csproj 文件所在的文件夹开始评估相对输出路径。不是来自 .sln 文件所在的文件夹。
Let's assume I have following directory structure:
dir1
a.sln
dir2
a.csproj
dir21
dir3
b.csproj
a.csproj 的输出路径设置为“../../_bin”,如果从 a.csproj 文件夹计算,它就在 dir1 之上
b.csproj 的输出路径设置为 '../../../_bin',这是相同的 - 如果从 b.csproj 计算,大约是 dir1
a.sln 包含 - a.csproj 和 b.csproj。
当我运行 msbuild 时,我将项目构建到 'dir1/../../_bin' 和 b 项目到 'dir1/../../../_bin' - 项目文件的两个相对路径都从解决方案中计算文件位置,而不是项目文件。
最佳答案
好吧,我能够找出导致这种情况的原因。那是自定义 .targets 文件,它在任何 msbuild 开始时推断 SolutionDir 属性。
我确实通过使用 MSBuild Explorer 发现了这一点。该工具在我的情况下被证明非常有用 - 我不知道我的系统上有第三方 .target 文件。
关于visual-studio-2010 - MSBuild 项目与解决方案的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775587/