2017-04-25 103 views

回答

3

我想這是出於兼容性原因。 x86很可能在csproj中引用您的<RuntimeIdentifier>

<PropertyGroup Condition="'$(TargetFramework)' == 'net462'"> 
    <RuntimeIdentifier>win7-x86</RuntimeIdentifier> 
</PropertyGroup> 

一個它需要的原因是爲了拉動的NuGet依賴和ASP.NET核心依賴於一些本地/非託管庫(=不寫在C#/ CLR庫,但本地的人在C/C++) ,就像libuv一樣(請參閱NuGet),它是ASP.NET Core使用的異步套接字庫。

如果它默認爲x64那麼這類應用程序無法在x86操作系統上恢復/運行,所以目前唯一的理智設置是x86。

對於.NET CLR/IL代碼,體系結構(x64或x86)並不重要,但是對於這些外部依賴性來說,它確實無關緊要。這也是爲什麼當你隱瞞project.json項目的目標爲net45netstandard1.x到csproj時,你需要將上面的xml代碼添加到你的csproj中,以便給NuGet提示它應該恢復哪種類型的體系結構。

如果您和您的同事都不在x86操作系統上開發項目,那麼您可以安全地將其更改爲<RuntimeIdentifier>win7-x64</RuntimeIdentifier>。有關有效RID(RuntimeIdentifiers)的列表,請參閱ASP.NET核心documentation。當然,對於.NET Framework,您僅限於win* RID。

它應該是沒有什麼可擔心的,你可以把它留在默認狀態。通常它不會有問題,因爲大多數庫都是在NuGet包內同時包含x64和x86。但是可能有一些庫只能運行一個或兩個庫。

+0

使用Core的Core模板使用.NET Framework目標x86的AnyCPU和Core模板似乎很奇怪。 –

+0

在將項目更改爲AnyCPU並刪除了運行時標識符之前,我無法使用Ninject。哪些不支持Core,但是我應該能夠加載它並使用它,如果我是在.NET 4.6.2的基礎上構建的? 移除此: ' WIN7 86' 將此添加: '<的PropertyGroup條件= 「 '$(配置)| $(平臺)' == '調試| AnyCPU'」> AnyCPU ' –

+0

如果有人看到這個......做上面的事(切換到AnyCPU並且不指定運行時標識符)打破了Kestrel。我通過切換到WebListener來運行我的項目,如下所述:https://docs.microsoft。com/en-us/aspnet/core/fundamentals/servers/weblistener –

相關問題