我有一个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文件,设置默认平台,但我仍然在尝试,如果找到答案,我希望能添加一个答案。
发布于 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:
<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),所以开始标记看起来不像通常的那样,更像这样:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">这是因为基于$(Platform)的任何差异都是没有意义的。
我还在上面添加了一条xml注释,基本上告诉下一个开发人员,如果遇到这种情况,设置任何不同的设置(取决于平台)都不会像预期的那样工作,因为PlatformTarget必须设置为x64,而$( platform )必须设置为AnyCPU。
我迫不及待地想摆脱这个问题,但微软似乎要等到下一个版本的Visual发布时才会修复这个问题,届时project.json将被删除,并且(我希望),DotNetCore最终将真正与Visual集成。
https://stackoverflow.com/questions/40309163
复制相似问题