与MSBuild项目与解决方案相对路径(Relative paths with MSBuild pr

2019-07-19 15:18发布

我有一些被加入到一个解决方案项目。 每个项目都有它自己的目录结构,文件的csproj位于文件夹结构的diferrent水平。 每一个的csproj有OutputPath指定的属性。 OutputPath - 是一个相对路径,它从不同的项目在这样一种方式,所有项目都有相同的输出目录项目。 如果我建一个单独的项目,这是工作确定。 但是,如果我尝试构建解决方案文件的一切变化。 在这种情况下,每个项目的输出文件夹不同(取决于该项目的OutputPath一些“.. \”)。

我知道,在此之前,有的时候都工作正常。 没有人改变build.cmd没有任何前哨淋巴结或文件的csproj。 但现在我已经上述情况。

所以我的问题是 - 什么影响路径如何相对评价? 我的意思是我怎么能强迫相对OutputPath从那里特定项目的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夹b.csproj计数这仅仅是上述DIR1输出路径具有设置为” ../../../_bin'输出路径,其是一样的 - 只是DIR1如果从b.csproj计

a.sln同时包含 - a.csproj和b.csproj。

当我运行的MSBuild,我得到一个项目,构建以“DIR1 /../../_斌”和B项目“DIR1 /../../../_斌” - 从溶液中被计数的项目文件都相对路径文件位置,而不是项目文件。

Answer 1:

好吧,我能找出是什么造成这一点。 这是自.targets文件,这是在任何的MSBuild开始推断SolutionDir财产。 我也发现,使用的MSBuild资源管理器。 该工具被证明是在我的情况是非常有用的 - 我不知道第三方的.TARGET我的系统上的文件。



Answer 2:

从MSBUILD导入元素描述

在引进项目相对路径相对被解释为进口项目的目录。 因此,如果一个项目文件导入到不同位置的多个项目文件,在导入项目文件中的相对路径将分别为每个引进项目的解释。

这是在导入项目中引用的所有的MSBuild保留属性,涉及到项目文件,例如,MSBuildProjectDirectory和MSBuildProjectFile,被赋予基于进口项目文件中的值。

如果添加了更多的细节或几样对您的问题 - 这将是更容易理解确切的问题。

编辑:好吧,让我们尝试找出那个谜。 首先, - OutputPath可以通过环境变量的影响。

2日 - 中建转变为MSBuild项目文件格式,并存储在临时文件SLN文件。 如果你在cmd中执行你可以得到临时文件“设置msbuildemitsolution = 1”,然后触发通过命令行建立。 在那里,你可以检查该文件,并查看您的个人项目怎么叫。 不过,我想你会看到多个的.csproj />条目。 而全球的MSBuild属性继承由调用。

所以我想,如果一切都很好,之前的一些点,并且未进行任何更改 - 你缺少OutputPath环境变量或施工OutputPath的贡献其他一些变量。

顺便说一句 - 我认为,如果你想与强制相DIR解决您的问题 - 你也可以使用$(MSBuildProjectDirectory)。 这是(MSBuild中保留的属性之一在这里 ),但这将需要哟调整OutputPath中的每个文件的csproj。 我个人而言,希望避免,因为它可能会影响其他一些目标和引入微妙的问题。



文章来源: Relative paths with MSBuild project vs solution