C# プロジェクトを古いスタイルから新しい csproj スタイルに変換しようとしていますSystem.ValueTuple.dll
が、実装アセンブリではなく ReferenceAssembly がコピーされるため、実行時に Azure クラウド サービスが機能しなくなります。
これは、このクローズド/放棄された問題で説明されている問題と同じです。
私のプロジェクトは現在 .NET 4.6.2 をターゲットにしているため、.NET 4.7 以降をターゲットにすることで問題は「解決可能」System.ValueTuple
です。これは、NuGet パッケージとして参照する必要がないためです。
可能であれば、次のようにこの状況を回避したいと思います。
- これには、worker ロールに .net 4.6.2 がインストールされているため、.net 4.7+ ランタイムをインストールするための追加のデプロイ手順が必要です。https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-guestos-update-matrix#family-5-releases
- これは「簡単な方法」のように思えます。別の方法で問題を解決できるかどうかを知りたいです。
問題の追加説明:
私は使用します:
refDLL
対象:packages\system.valuetuple\4.5.0\ref\net461\System.ValueTuple.dll
、およびlibDLL
のためにpackages\system.valuetuple\4.5.0\lib\net461\System.ValueTuple.dll
。
それらは、refDLL
40 kb とlibDLL
78 kb のように、簡単に区別できます。
実際のコードと完全なビルド ログ ファイルは、https ://www.dropbox.com/s/kquv5voa19jfonz/AzureCloudService1.zip?dl=0 にあります。
次のようなソリューション構造があります。
- AzureCloudService1
- WorkerRole1 (旧 csproj)
- WorkerRole2 (新しい csproj)
クラウドサービスを構築したら、
WorkerRole1\bin\Debug
持っていlibDLL
ます。WorkerRole2\bin\Debug\net461
もっているlibDLL
AzureCloudService1\obj\Debug\WorkerRole1
もっているlibDLL
AzureCloudService1\obj\Debug\WorkerRole2
もっているrefDLL
ログから、WorkerRole1 と WorkerRole2 の次の違いに気付きました。
WorkerRole1:
C:\Users\jonas\source\repos\AzureCloudService1\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll
CopyLocal = true
FusionName = System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
HintPath = ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll
ImageRuntime = v4.0.30319
MSBuildSourceProjectFile = C:\Users\jonas\source\repos\AzureCloudService1\WorkerRole1\WorkerRole1.csproj
MSBuildSourceTargetName = BuiltProjectOutputGroupDependencies
OriginalItemSpec = System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL
ReferenceAssembly = C:\Users\jonas\source\repos\AzureCloudService1\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll
ReferenceSourceTarget = ResolveAssemblyReference
ResolvedFrom = {HintPathFromItem}
Version = 4.0.3.0
WorkerRole2:
C:\Users\jonas\.nuget\packages\system.valuetuple\4.5.0\ref\net461\System.ValueTuple.dll
CopyLocal = false
ExternallyResolved = true
FusionName = System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
HintPath = C:\Users\jonas\.nuget\packages\system.valuetuple\4.5.0\ref\net461\System.ValueTuple.dll
ImageRuntime = v4.0.30319
MSBuildSourceProjectFile = C:\Users\jonas\source\repos\AzureCloudService1\WorkerRole2\WorkerRole2.csproj
MSBuildSourceTargetName = BuiltProjectOutputGroupDependencies
NuGetPackageId = System.ValueTuple
NuGetPackageVersion = 4.5.0
NuGetSourceType = Package
OriginalItemSpec = C:\Users\jonas\.nuget\packages\system.valuetuple\4.5.0\ref\net461\System.ValueTuple.dll
Private = false
ReferenceAssembly = C:\Users\jonas\.nuget\packages\system.valuetuple\4.5.0\ref\net461\System.ValueTuple.dll
ReferenceSourceTarget = ResolveAssemblyReference
ResolvedFrom = {HintPathFromItem}
Version = 4.0.3.0
さまざまなマイクロソフトの問題トラッカーで他の関連する問題を検索した後、関連していると思われるこの問題を見つけました: https://github.com/dotnet/sdk/issues/1738。