我想這是出於兼容性原因。 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項目的目標爲net45
和netstandard1.x
到csproj時,你需要將上面的xml代碼添加到你的csproj中,以便給NuGet提示它應該恢復哪種類型的體系結構。
如果您和您的同事都不在x86操作系統上開發項目,那麼您可以安全地將其更改爲<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
。有關有效RID(RuntimeIdentifiers)的列表,請參閱ASP.NET核心documentation。當然,對於.NET Framework,您僅限於win*
RID。
它應該是沒有什麼可擔心的,你可以把它留在默認狀態。通常它不會有問題,因爲大多數庫都是在NuGet包內同時包含x64和x86。但是可能有一些庫只能運行一個或兩個庫。
使用Core的Core模板使用.NET Framework目標x86的AnyCPU和Core模板似乎很奇怪。 –
在將項目更改爲AnyCPU並刪除了運行時標識符之前,我無法使用Ninject。哪些不支持Core,但是我應該能夠加載它並使用它,如果我是在.NET 4.6.2的基礎上構建的? 移除此: ' WIN7 86 RuntimeIdentifier>' 將此添加: '<的PropertyGroup條件= 「 '$(配置)| $(平臺)' == '調試| AnyCPU'」> AnyCPU PlatformTarget> PropertyGroup>' –
如果有人看到這個......做上面的事(切換到AnyCPU並且不指定運行時標識符)打破了Kestrel。我通過切換到WebListener來運行我的項目,如下所述:https://docs.microsoft。com/en-us/aspnet/core/fundamentals/servers/weblistener –