我正在使用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