Противоречивые версии сборки в использовании от msbuild - PullRequest
0 голосов
/ 30 июня 2018

Я использую msbuild v. 15, который включен в моно на Ubuntu. Я понизил ссылки на мои сборки с gtk-sharp 3.0 до 2.12, чтобы учесть несовместимость со стетическим дизайнером monodevelop. К сожалению, msbuild все еще (по некоторым причинам) хочет использовать более новую версию. Подробный вывод сборки показывает (только выдержки):

Task "GetDependsOnNETStandard" skipped, due to false condition;
 ('$(DependsOnNETStandard)' == '' AND '$(NETStandardInbox)' != 'true' AND 
 '@(_CandidateNETStandardReferences)' != '') 
 was evaluated as ('' == '' AND 'true' != 'true' AND 
 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;
 gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f;
 gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f;
 glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f;
 atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f;
 Mono.Cairo, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756;
 ...' != '').


Task "ResolveAssemblyReference"
  TargetFrameworkMoniker:
      .NETFramework,Version=v4.7.1
  TargetFrameworkMonikerDisplayName:
      .NET Framework 4.7.1
  TargetedRuntimeVersion:
      v4.0.30319
  Assemblies:
      System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
      gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f
      gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f
      glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f
      atk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f
      Mono.Cairo, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
      ...

Primary reference "gtk-sharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f".
  Resolved file path is "/usr/lib/mono/gac/gtk-sharp/3.0.0.0__35e10195dab3c99f/gtk-sharp.dll".
  Reference found at search path location "{GAC}".
      For SearchPath "{TargetFrameworkDirectory}".
      Considered "/usr/lib/mono/xbuild-frameworks/.NETFramework/v4.7.1/gtk-sharp.winmd", but it didn't exist.
      Considered "/usr/lib/mono/xbuild-frameworks/.NETFramework/v4.7.1/gtk-sharp.dll", but it didn't exist.
      Considered "/usr/lib/mono/xbuild-frameworks/.NETFramework/v4.7.1/gtk-sharp.exe", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/gtk-sharp.winmd", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/gtk-sharp.dll", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/gtk-sharp.exe", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/Facades/gtk-sharp.winmd", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/Facades/gtk-sharp.dll", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/Facades/gtk-sharp.exe", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/Facades/gtk-sharp.winmd", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/Facades/gtk-sharp.dll", but it didn't exist.
      Considered "/usr/lib/mono/4.7.1-api/Facades/gtk-sharp.exe", but it didn't exist.
  Found related file "/usr/lib/mono/gac/gtk-sharp/3.0.0.0__35e10195dab3c99f/gtk-sharp.dll.config".
  This reference is not "CopyLocal" because it's registered in the GAC.
  The ImageRuntimeVersion for this reference is "".

Мне неясно, почему он переходит с 2.12 на 3.0 в середине сборки.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Трудно определить, почему именно объединенная ссылка оказалась на более высокой, чем ожидалось, версии сборки из предоставленной вами информации, но вот два указателя, которые я нашел неоценимыми при решении подобных проблем.

  1. Средство просмотра binlog MSBuild ( source ). Добавьте -bl:somename.binlog в вызов MSBuild, а затем просмотрите журнал с помощью инструмента. Файл журнала является автономным (включает в себя сжатые сценарии и все остальное) и может быть просмотрен на другом компьютере. Я никогда не использовал его, кроме как на Windows, поэтому не могу сказать, работает ли он под Mono.

  2. Наиболее подробное объяснение процесса унификации сборки во время сборки от одного из лучших дизайнеров MSBuild, Райнера Сигвальда. ResolveAssemblyReference, вероятно, является одним из наиболее логически сложных этапов сборки, и эта ссылка буквально охватывает все это.

0 голосов
/ 01 июля 2018

Удаление пакетов lib{atk,gdk,glib,gtk}3.0-cil исправило мою сборку. Это не имеет смысла, но это сработало.

...