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



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

然而VS坚持要把这一点放在包括以下内容的前面:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
   <IntermediateOutputPath>C:UsersxyzAppDataLocalTempvs855E.tmpDebug</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
   <IntermediateOutputPath>C:UsersxyzAppDataLocalTempvs855E.tmpRelease</IntermediateOutputPath>
</PropertyGroup>
<Import Project="$(MSBuildProjectDirectory)..Common.props" />

为什么?

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

当MSBuild的路径不正确时,可以插入这些IntermediateOutputPath。

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

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

<OutputPath>$(SolutionDir)outbin</OutputPath>
<IntermediateOutputPath>$(SolutionDir)outobj</IntermediateOutputPath>

什么起作用:

<OutputPath>$(SolutionDir)outbin</OutputPath>
<IntermediateOutputPath>$(SolutionDir)outobj</IntermediateOutputPath>

若要帮助解决特定情况,请尝试在"工具"->"选项"->"项目和解决方案"->"生成并运行"->"MSBuild项目生成输出详细信息"下打开诊断MSBuild输出并进行日志记录。然后,搜索生成的文件夹(例如"Temp")。

使用公共的proj/props/targets文件是一个不错的主意,但它确实需要与Visual Studio进行一些斗争。

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

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

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

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

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

.csproj文件中自动生成的IntermediateOutputPath

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

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

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

相关内容

  • 没有找到相关文章

最新更新