2017-04-25 25 views
3

なぜですか?VS .NET Framework 4.6.2新しいASP.NETコアWebアプリケーション(.NET Framework)の既定値はx86プラットフォーム

Webアプリケーション(.NET Framework)とCore Webアプリケーション(.NET Core)はどちらもAnyCPUプラットフォームを対象としています。

これはバグですか?そうすることで何か価値がありますか?

私はWindows 10 x64で、2011年4月18日のVS2017アップデートをインストールしました。

のMicrosoft Visual Studioのエンタープライズ2017 バージョン15.1(26403.7)私はそれが互換性の理由のためだと仮定し VisualStudio.15.Release/15.1.0 + 26403.7 Microsoft .NET Frameworkのバージョン4.6.01586

答えて

3

をリリース。 x86はcsprojの<RuntimeIdentifier>を参照する可能性があります。これは必須です理由の

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

一つNugetの依存関係を引っ張るためであるとASP.NETコアは、いくつかのネイティブ/非管理ライブラリ(C/C中=のC#/ CLRで書かれていないライブラリが、ネイティブのもの++)に依存していますlibuv(NuGet参照)のように、ASP.NET Coreで使用される非同期ソケットライブラリです。

デフォルトではx64になると、この種のアプリケーションはx86オペレーションシステム上で復元/実行できないため、これまでのx86は唯一の設定です。

.NET CLR/ILコードでは、アーキテクチャー(x64またはx86)は実際には問題ありませんが、これらの外部依存関係はありません。それで、net45netstandard1.xをターゲットにしたproject.jsonプロジェクトをcsprojに変換するときにエラーが発生する理由は、上記のxmlコードをcsprojに追加して、NuGetに復元する必要があるアーキテクチャのヒントを与える必要があります。

あなたと他の同僚のいずれもx86 OSでプロジェクトを開発していない場合でも、これを<RuntimeIdentifier>win7-x64</RuntimeIdentifier>に変更できます。有効なRID(RuntimeIdentifier)の一覧については、ASP.NETコアdocumentationを参照してください。もちろん、.NET Frameworkの場合はwin* RIDに限定されています。

これは心配するものではなく、デフォルトのままにすることができます。通常、ほとんどのライブラリはNuGetパッケージ内でx64とx86の両方に同梱されているので、問題はありません。しかし、1つまたは複数のライブラリでしか実行できないライブラリが存在する可能性があります。

+0

コアターゲットを使用しているコアテンプレートは、AnyCPUと.NET Frameworkを使用するコアテンプレートであるx86をターゲットとしているようです。 –

+0

プロジェクトをAnyCPUに変更してランタイム識別子を削除するまでは、Ninjectを使用できませんでした。どちらがCoreをサポートしていませんが、.NET 4.6.2のビルドに対しては、ロードして使用できるはずです。 はこれを削除: ' win7の-x86の' 追加この: ' AnyCPU ' –

+0

誰もがこれを見ている場合...(AnyCPUに切り替え、ランタイム識別子を指定しない)上記を実行すると、Kestrelが壊れてしまいます。ここで説明するように、WebListenerに切り替えることでプロジェクトを実行できます:https://docs.microsoft。私が言ったように、Kestrelはネイティブコンポーネント(libuv)を持っており、起動するときに読み込むアーキテクチャのバージョンを知る必要があると思われるようなものでした(com/en-us/aspnet/core/fundamentals/servers/weblistener –

関連する問題