11

我正在使用 Visual Studio 2012 RC 来处理我的 C# 解决方案。我的所有特定于配置的设置都存储在一个 .props 文件中,然后我的所有 .csproj 文件都包含该文件。

然而 VS 坚持把它放在 include 前面:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
   <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Debug\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
   <IntermediateOutputPath>C:\Users\xyz\AppData\Local\Temp\vs855E.tmp\Release\</IntermediateOutputPath>
</PropertyGroup>

<Import Project="$(MSBuildProjectDirectory)\..\Common.props" />

这是为什么?

仅供参考,我的常用文件如下所示: http: //pastebin.com/Uued1XY0

4

4 回答 4

7

当 MSBuild 的路径错误时,可以插入这些 IntermediateOutputPath。

在我们的例子中,我们在输出文件夹的 SolutionDir 之后有额外的不必要的斜线。

什么对我们不起作用(注意额外的斜线):

<OutputPath>$(SolutionDir)\out\bin\</OutputPath>
<IntermediateOutputPath>$(SolutionDir)\out\obj\</IntermediateOutputPath>

什么工作:

<OutputPath>$(SolutionDir)out\bin</OutputPath>
<IntermediateOutputPath>$(SolutionDir)out\obj</IntermediateOutputPath>

为了帮助解决您的特定情况,请尝试打开诊断 MSBuild 输出并在 Tools->Options->Projects and Solutions->Build and Run->MSBuild project build output verbosity 下进行日志记录。然后,搜索生成的文件夹(例如“Temp”)。

使用通用的 proj/props/targets 文件是一个好主意,但它确实需要与 Visual Studio 稍作斗争。

于 2014-10-29T18:37:01.787 回答
0

您已在项目中指定。属性文件将具有 BaseIntermediateOutputPath。如果您未在其中指定任何值,它将从您的 Base 派生。

如果未指定路径,则从 BaseIntermediateOutputPath 派生的完整中间输出路径。例如,\obj\debug。如果覆盖此属性,则设置 BaseIntermediateOutputPath 无效。

参考:http: //msdn.microsoft.com/en-us/library/bb629394.aspx

于 2012-11-09T11:45:17.160 回答
0

因此,如果需要,您可以覆盖这些设置。如果您之前进行了导入,则 Visual Studio 的属性将优先。在 MSBuild 中,最后一个定义获胜并被使用。这是一件好事。它会导致错误吗?或者你只是不喜欢它?

于 2012-07-11T00:45:18.820 回答
0

如果在加载过程中插入 XML,我怀疑它与 NuGet 相关(假设您使用的是 NuGet)。如果您使用 Directory.Build.props 文件,您可以获得在 .props 文件中设置的 BaseIntermediateOuputPath。阅读这篇 stackoverflow 文章,了解有关搜索顺序及其工作原理的一些重要信息。

.csproj 文件中自动生成的 IntermediateOutputPath

在项目文件中设置 BaseIntermediateOutputPath 不会重定向 NuGet,因为它的值是在 MSBuild 包含设置 BaseIintermediateOutputPath 的 Sdk.props 之后设置的。这个问题有两种解决方案。设置 Base... 值后,使用 Directory.Build.props 或在项目中导入 SDK。我没有在您的 .csproj 文件中的适当位置尝试过这种方法。)。

这是一个自定义构建的链接,它引用了其中一些技术:

https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019

于 2020-08-06T11:14:18.403 回答