在Azure云服务上使用ValueTuple和PackageReference

时间:2018-06-29 15:04:32

标签: c# azure msbuild azure-cloud-services packagereference

我正在尝试将c#项目从旧的csproj样式转换为新的csproj样式,但这会在运行时中断我的Azure云服务,因为复制了System.ValueTuple.dll的ReferenceAssembly而不是实现程序集。

这与该封闭/废弃的issue中描述的问题相同。

由于我的项目当前针对的是.NET 4.6.2,因此问题可以通过解决System.ValueTuple附带的.NET 4.7+来解决,因此不需要将其作为NuGet包进行引用。

如果可能的话,我想避免这种情况,

问题的其他说明:

我将使用:

  • 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\DebuglibDLL
  • WorkerRole2\bin\Debug\net461libDLL
  • AzureCloudService1\obj\Debug\WorkerRole1libDLL
  • 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

在各种Microsoft问题跟踪器上搜索了其他相关问题之后,我发现了一个与此相关的问题:https://github.com/dotnet/sdk/issues/1738

0 个答案:

没有答案