Как проверить, использует ли мое приложение на C # подходящую для конкретной платформы dll из пакета nuget? - PullRequest
1 голос
/ 09 апреля 2019

Я занят добавлением поддержки нескольких .net каркасов и платформ.Кажется, работают разные рамки.Но если используется подходящая для конкретной платформы dll, я не знаю, как это проверить.Теперь кажется, что всегда используется версия MSIL / Any CPU ...

Сначала пакет nuget

Я следовал описанию по адресу:

https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks

И я также использую файлы .targets и .props.

Код см. В проекте Pullrequest Opensource: https://github.com/lucascebertin/Serilog.Sinks.Burst/pull/1

Использованиепакет nuget

При использовании пакета Nuget все работает.Но в настоящее время я делаю 2 проверки, чтобы увидеть, используется ли правильная платформа DLL.Примечание. Платформой является MSIL / Any CPU, x86 и x64.

Я делаю различие между dll в моем пакете и извлеченным / скопированным в папке bin используемого проекта:MSIL / Любая версия DLL ЦП копируется.

Вторая проверка выполняется из кода, чтобы увидеть, какая DLL используется во время выполнения:

   var oraSinkAsm = Assembly.GetAssembly(typeof(Serilog.Sinks.Burst.Burst<>));
    Console.WriteLine("Using {0} from {1}", oraSinkAsm.FullName, oraSinkAsm.CodeBase);
    Console.WriteLine("Location: {0}", oraSinkAsm.Location);

Результат:

Использование Serilog.Sinks.Burst, версия = 1.0.1.0, культура = нейтральная, PublicKeyToken = ноль из файла: /// C: /Develop/Serilog.Sinks.Oracle/src/Serilog.Sinks.Oracle/Serilog.Sinks.Oracle.ConsoleTester / bin / x64 / Release / net452 / Serilog.Sinks.Burst.DLL Расположение: C: \ Develop \ Serilog.Sinks.Oracle \ src \ Serilog.Sinks.Oracle \ Serilog.Sinks.Oracle.ConsoleTester \ bin \ x64\ Release \ net452 \ Serilog.Sinks.Burst.dll

Поэтому выше bin \ x64 \ Release \ net452 \ Serilog.Sinks.Burst.dll выглядит как версия MSIL: enter image description here

Исходная сборочная версия в моей папке dist \ build: enter image description here

Так что они должны быть одинаковыми, но diffСостояния: I386 против AMD64 ???

Мои вопросы:

  • Использует ли среда выполнения C # другой dll, чем время компиляции?
  • Достаточны ли выше проверки илимне нужны другие?
  • Действительно ли нужно создавать все варианты платформ или достаточно MSIL / Any CPU dll?

1 Ответ

1 голос
/ 09 апреля 2019

Обычно нет необходимости включать какие-либо специфичные для архитектуры папки в ваш пакет, если он не содержит каких-либо сборок, специально предназначенных для ARM, x86 или x64.Как правило, это относится только к собственным (не .NET) сборкам, которые может переносить код C #.

Если ваш пакет содержит только управляемые сборки, наиболее распространенная вещь - это сборка на любом процессоре в режиме выпуска.

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