Использование ValueTuple с PackageReference в облачных службах Azure - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь преобразовать мои проекты на c # из старого в новый стиль csproj, но это нарушает работу моей облачной службы Azure во время выполнения, потому что ReferenceAssembly System.ValueTuple.dll копируется вместо внедряющей сборки.

Это та же проблема, что и описанная в этом закрытом / оставленном выпуске .

Поскольку мои проекты в настоящее время нацелены на .NET 4.6.2, проблема «решаема» путем нацеливания на .NET 4.7+, поскольку она поставляется с System.ValueTuple и, следовательно, не требует ссылки на нее как пакет NuGet.

Я бы хотел, по возможности, избежать этой ситуации, так как:

  • Для этого требуется дополнительный шаг развертывания, чтобы установить среды выполнения .net 4.7+ на рабочие роли, так как они поставляются с установленным .net 4.6.2. 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 КБ, а libDLL составляет 78 КБ.

Фактический код и полный файл журнала сборки находятся здесь: 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

После поиска других связанных проблем на различных трекерах Microsoft я обнаружил этот, который, похоже, имеет отношение: https://github.com/dotnet/sdk/issues/1738.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...