Dotnet публикует не публикует DLL для публикации каталога - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу опубликовать мое автономное приложение .NET Core (2.2), однако один конкретный пакет NuGet (Microsoft.Management.Infrastructure) никогда не публикуется в папке publish (как в файле .dll нет).

Я использую команду dotnet publish -c Release --self-contained -r win-x64 ConsoleApp1.При запуске приложения внутри visual studio все работает.Однако при запуске скомпилированного исполняемого файла я получаю FileNotFoundException:

Необработанное исключение: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'Microsoft.Management.Infrastructure, Version = 1.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 '.Система не может найти указанный файл.at ConsoleApp1.Program.Main (String [] args)

Воспроизвести

1) Создать простое консольное приложение .NET Core (я тестировал и 2.1, и 2.2, без разницы)
2) Добавить пакет NuGet Microsoft.Management.Infrastructure
3) Добавить следующий код в приложение:

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var sessionOptions = new DComSessionOptions
            {
                Timeout = TimeSpan.FromSeconds(30)
            };

            CimSession Session = CimSession.Create("localhost", sessionOptions);

            var processors = Session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_Processor");
            foreach (CimInstance processor in processors)
            {
                Console.WriteLine(processor.CimInstanceProperties["Name"].Value);
            }

            Console.ReadLine();
        }
    }
}

4) Опубликовать проект: dotnet publish -c Release --self-contained -r win-x64 ConsoleApp1
5) Запуститьскомпилированный исполняемый файл

1 Ответ

0 голосов
/ 24 февраля 2019

Пакет MMI состоит из нескольких сборок, характерных для версии Windows, а именно: win10-x64, win10-x86 win8-x64 и т. Д.

Таким образом, вы должны использоватьцелевое время выполнения для конкретной версии (например: win10-x64) вместо универсального win-x64.Используя команду публикации снизу, MMI DLL включается в процедуру публикации.

dotnet publish -c Release --self-contained -r win10-x64 ConsoleApp1
...