我正在使用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
答案 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无效。
答案 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