我有一个AspNetCore项目引用了另一个项目,它为AnyCpu和x64平台构建,我需要两个平台都支持(我有遗留项目需要AnyCpu,但AspNetCore只支持x64平台)。
所以我需要在构建我的AspNetCore项目时使用x64平台。问题是我引用项目的AnyCpu配置有OutputDirectory bin \ debug,而对于我的x64配置,OutputDirectory是bin \ x64 \ debug。问题在于生成的project.fragment.lock.json文件内部(我甚至不确定它的Visual Studio或其他生成project.fragment.lock.json的东西),我总是看到通过路径bin \ debug引用的dll,而不是bin \ debug \ x64。
我通过使引用项目的输出目录与平台无关来解决这个问题,但这是一个糟糕的解决方案,因为它通常会因为使用为错误平台构建的dll而导致错误(和许多其他问题)。有没有其他人发现这个?
我已经尝试了相当多的黑客攻击,包括修改AspNetCore项目的xproj以尝试注入平台,并修改引用项目的csproj文件,设置默认平台,但是我&# 39; m仍然在尝试,如果找到答案,我希望能够添加一个答案。
答案 0 :(得分:0)
以下是我设法梳理的内容,以及解决我已解决的问题的解决方法。
最初我认为在构建AspNetCore项目时,由于该项目中没有$(平台)值的标志,Visual Studio正在构建这些项目而没有设置$(平台),但那并没有。是正确的。实际上,对于AspNetCore项目(或任何使用xproj文件的项目),$(Platform)显式设置为AnyCPU,据我所知,不可能改变它。如果您尝试在Configuration Manager中将平台设置为x64以用于DotNetCore项目,它将不会显示任何错误,但它不会产生任何影响;下次打开配置管理器时,它会将其显示为设置回AnyCPU。
所以,鉴于我无法控制$(Platform)设置的内容,并且它被固定到AnyCPU,但是我要求PlatformTarget设置为x64,并且我需要一个不同的OutputPath对于x64与AnyCPU,我别无选择,只能使用$(配置)开始控制它。
这就是解决方案:在解决方案中创建DebugDotNetCore配置和ReleaseDotNetCore配置,在AspNetCore项目使用的任何项目中,创建如下所示的PropertyGroup:
<PropertyGroup Condition="'$(Configuration)' == 'DebugDotNetCore'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\DebugDotNetCore\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
然后,在Configuration Manager中,使DebugDotNetCore配置在您已添加到的每个项目中使用DebugDotNetCore。并且还为AspNetCore项目添加配置,并将其用于那些(或者没有一个没有任何效果)。在修复之前,我在构建AspNetCore项目时使用DebugDotNetCore和ReleaseDotNetCore配置,在构建其他所有项目时使用Debug和Release配置。
哦,还注意到我没有在新的PropertyGroups中检查$(平台),所以begin标签看起来不像他们通常那样,更像是这样:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
这是因为基于$(平台)的任何差异都没有意义。
我还在这些附近添加了一条xml评论,基本上告诉下一个开发人员不幸碰到这个设置,取决于平台赢得了预期的工作,因为PlatformTarget必须设置为x64,而$ (平台)必须设置为AnyCPU。
我无法等待摆脱这种情况,但似乎微软不会修复此问题,直到Visual Studio的下一个版本问世,此时将删除project.json,并且(我希望),DotNetCore最终将真正与Visual Studio集成。