Xamarin, связывающий только сборки SDK - используя AssemblyName против AssemblyName.Class.Method - PullRequest
0 голосов
/ 19 октября 2018

У меня есть dll MyAssemblyOne.dll, который содержит только один класс со статическими методами:

namespace MyAssemblyOne 
{
   public class MyClassOne 
   {
      public static string MyStaticMethod()
      {
         ...
      }
   }
} 

Пока все хорошо, сборка MyAssemblyOne.dll генерируется.

Теперь у меня есть другая dll, MyAssemblyTwo.dll, которая зависит от MyAssemblyOne.dll и использует ее следующим образом:

    no using here;
    namespace MyAssemblyTwo 
    {
       public class MyClassFromAssemblyTwo 
       {
          public string SomeRandomMethod()
          {
             ...
             var smth = MyAssemblyOne.MyClassOne.MyStaticMethod();
             ...
          }
       }
    }

Теперь я создаю проект Xamarin с Linking, установленным на Sdk Assemblies Onlyи Use Shared Runtime отключен (в основном режим выпуска), и я добавляю две мои библиотеки - MyAssemblyTwo.dll и MyAssemblyOne.dll.Приложение работает нормально, но когда я его запускаю, я получаю что-то вроде: cannot find MyAssemblyOne.dll.

Обратите внимание, что это работает, если для параметра Связывание установлено значение None.

Однако, если я изменю MyAssemblyTwo, использование MyAssemblyOne будет:

using MyAssemblyOne;

namespace MyAssemblyTwo 
{
   public class MyClassFromAssemblyTwo 
   {
      public string SomeRandomMethod()
      {
         ...
         var smth = MyClassOne.MyStaticMethod();
         ...
      }
   }
}

все работает нормальнодаже если для Linking установлено значение Sdk Assemblies Only.

Как работает компоновщик?Почему, если у меня есть оператор using, все в порядке, но если я использую имя сборки прямо в коде, оно ломается.

Стоит отметить, что MyAssemblyOne и MyAsseblyTwo являются netstandard20 проектами.

...