首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AspNetCore、project.fragment.lock.json和多个配置平台

AspNetCore、project.fragment.lock.json和多个配置平台
EN

Stack Overflow用户
提问于 2016-10-28 16:17:25
回答 1查看 538关注 0票数 0

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

因此,我需要在构建我的x64项目时使用AspNetCore平台。问题是,引用项目的AnyCpu配置具有OutputDirectory bin\debug,而对于x64配置,OutputDirectory是bin\x64\debug。问题是,在生成的project.fragment.lock.json文件中(我甚至不确定它的Visual还是生成project.fragment.lock.json的其他东西),我总是看到通过路径bin\debug引用的dll,而不是bin\debug\x64。

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

我尝试了大量的方法,包括修改AspNetCore项目的xproj以尝试注入平台,以及修改引用项目的csproj文件,设置默认平台,但我仍然在尝试,如果找到答案,我希望能添加一个答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 16:42:48

以下是我所想出的,以及我已经解决的问题的解决办法。

最初,我认为在构建AspNetCore项目时,由于该项目中没有$(Platform)值的迹象,Visual在构建这些项目时没有设置$(Platform),但这是不正确的。实际上,对于AspNetCore项目(或任何使用xproj文件的项目),$(Platform)被显式地设置为AnyCPU,据我所知,不可能改变这一点。如果试图在Configuration中将DotNetCore项目的平台设置为DotNetCore,它将不会显示任何错误,但不会产生任何影响;下次打开Configuration时,它将显示为设置为AnyCPU。

因此,考虑到我无法控制将$(Platform)设置为什么,并且它被固定到AnyCPU,但是我要求PlatformTarget设置为x64,并且我需要为x64和AnyCPU设置一个不同的OutputPath,我别无选择,只能使用$(配置)来控制它。

这就是解决办法:在解决方案中创建DebugDotNetCore配置和ReleaseDotNetCore配置,以及在AspNetCore项目使用的任何项目中创建如下所示的PropertyGroups:

代码语言:javascript
复制
<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中,让DebugDotNetCore配置在添加到的每个项目中使用DebugDotNetCore。并为AspNetCore项目添加配置,并将其用于那些项目(否则,这些配置都不会产生任何效果)。在解决这个问题之前,我在构建我的DebugDotNetCore项目时使用ReleaseDotNetCore和ReleaseDotNetCore配置,在构建其他东西时使用调试和发布配置。

哦,还请注意,我没有在新的PropertyGroups中签入$(Platform),所以开始标记看起来不像通常的那样,更像这样:

代码语言:javascript
复制
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">

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

我还在上面添加了一条xml注释,基本上告诉下一个开发人员,如果遇到这种情况,设置任何不同的设置(取决于平台)都不会像预期的那样工作,因为PlatformTarget必须设置为x64,而$( platform )必须设置为AnyCPU。

我迫不及待地想摆脱这个问题,但微软似乎要等到下一个版本的Visual发布时才会修复这个问题,届时project.json将被删除,并且(我希望),DotNetCore最终将真正与Visual集成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40309163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档