visual-studio-2010 - MSBuild 项目与解决方案的相对路径

标签 visual-studio-2010 msbuild

我有许多项目加入了一个解决方案。每个项目都有自己的目录结构,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/

相关文章:

visual-studio-2010 - Visual Studio 2010 Express iso 的 URL?

c# - 我的 WPF 应用程序未触发 MainWindow_Loaded

c# - 更改文件中的一个字符会导致 MSysGit 认为整个文件都已更改

c# - 在 visual studio 解决方案资源管理器中隐藏具有某些扩展名 (dll) 的文件

visual-studio - 热门 Visual Studio 2010 C/C++ 扩展

MSBuild 社区任务文档

c# - TFS 构建输出中不包含链接的内容文件

c# - 如何与 Microsoft.Build.Execution.BuildManager 并行构建?

visual-studio-2012 - 使用MS Build的IIS WebDeploy失败,错误为MSB4044 -ConcatFullServiceUrlWithSiteName任务

c# - 如何在 Visual Studio 中安装 C# 类库?