AspNetCore, project.fragment.lock.json,以及多个配置的平台



我有一个AspNetCore项目,它引用了另一个项目,该项目为AnyCpu和x64平台构建,我需要支持这两个平台(我有需要AnyCpu的遗留项目,但AspNetCore只支持x64平台)。

所以我需要x64平台在构建我的AspNetCore项目时使用。问题是,我的AnyCpu配置的参考项目有OutputDirectory bindebug,而我的x64配置的OutputDirectory是binx64debug。麻烦的是,在生成的project.fragment.lock.json文件中(我甚至不确定它是Visual Studio还是生成project.fragment.lock.json的其他东西),我总是看到通过路径bindebug引用的dll,而不是bindebugx64。

我已经通过使所引用项目的输出目录与平台相同来解决它,但这是一个糟糕的解决方案,因为它经常导致由于使用为错误平台构建的dll而导致的错误(以及许多其他问题)。有人在这附近发现了吗?

我已经尝试了相当数量的黑客围绕它,包括修改xproj为AspNetCore项目尝试注入平台,并修改csproj文件为参考的项目,设置默认平台,但我仍在尝试,并希望添加一个答案,如果我找到一个。

以下是我设法梳理出来的内容,以及我已经解决的问题的解决方法。

最初我认为,当构建AspNetCore项目时,因为在该项目中没有$(平台)值的迹象,Visual Studio在构建这些项目时没有设置$(平台),但这是不正确的。事实上,对于AspNetCore项目(或任何使用xproj文件),$(平台)被显式设置为AnyCPU,这是不可能的,据我所知,改变这一点。如果你试图在配置管理器中为DotNetCore项目设置x64平台,它不会显示任何错误,但它不会有任何效果;下次您打开配置管理器时,它将显示它设置回AnyCPU。

因此,鉴于我无法控制$(平台)被设置为什么,并且它被确定为AnyCPU,但我需要将PlatformTarget设置为x64,并且我需要x64与AnyCPU的不同OutputPath,我别无选择,只能开始使用$(配置)来控制它。

所以这就是解决方案:在解决方案中创建DebugDotNetCore配置和ReleaseDotNetCore配置,并在AspNetCore项目使用的任何项目中创建PropertyGroups,看起来像这样:

<PropertyGroup Condition="'$(Configuration)' == 'DebugDotNetCore'">
  <DebugSymbols>true</DebugSymbols>
  <OutputPath>binDebugDotNetCore</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <DebugType>full</DebugType>
  <PlatformTarget>x64</PlatformTarget>
  <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

然后,在配置管理器中,使DebugDotNetCore配置在您添加到的每个项目中使用DebugDotNetCore。并且还为AspNetCore项目添加配置,并将其用于这些项目(否则这些都不会有任何效果)。直到这是固定的,我使用DebugDotNetCore和ReleaseDotNetCore配置时,构建我的AspNetCore项目和调试和发布配置时,构建其他一切。

哦,还要注意我没有在新的PropertyGroups中检查$(Platform),所以开始标签看起来不像它们通常做的那样,更像这样:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">

这是因为基于$(Platform)的任何差异都没有意义。

我还在这些附近包含了一个xml注释,基本上告诉下一个不幸遇到这种情况的开发人员,根据平台的不同设置任何不同的东西都不会像预期的那样工作,因为PlatformTarget必须设置为x64,而$(platform)必须设置为AnyCPU。

我迫不及待地想摆脱这个,但似乎微软不会解决这个问题,直到下一个版本的Visual Studio出来,到那时项目。json将被删除,并且(我希望),DotNetCore将最终真正与Visual Studio集成。

最新更新