Visual Studio不断向我的csproj添加属性。为什么?

时间:2012-07-09 18:45:19

标签: .net visual-studio msbuild visual-studio-2012 csproj

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

然而,VS坚持将这一权利放在包括:

之前
<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 个答案:

答案 0 :(得分: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输出并在工具 - &gt;选项 - &gt;项目和解决方案 - &gt;构建和运行 - &gt;下进行记录。 MSBuild项目构建输出详细程度。然后,搜索生成的文件夹(例如&#34; Temp&#34;)。

使用常见的proj / props / targets文件是个好主意,但它确实需要对Visual Studio进行一些攻击。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您已在项目中指定了该项目。 Property文件将具有BaseIntermediateOutputPath。如果您未指定任何值,则将从您的Base中派生。

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

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

答案 3 :(得分:0)

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

Autogenerated IntermediateOutputPath in the .csproj file

在项目文件中设置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