Только постоянная сборка все еще требуется во время выполнения я dotnetcore - PullRequest
0 голосов
/ 13 марта 2020

Я получил сборку, содержащую только классы * stati c с константами

public static class C {
    public const int Value = 123;
}

Я использую эту сборку в разных приложениях, она помечена CopyLocal = false и не развернута.

Это работает для netframework приложений, но для netcoreapp Я получаю сообщение об ошибке, в котором говорится, что сборка не найдена.

Сборка не указана в скомпилированном коде (проверено с помощью ildasm), но есть все еще является ссылкой в ​​файле .deps.json.

Нужно ли развертывать сборку с основными приложениями или есть параметры для ее исключения из файла .deps.json?

(Большинство из моих сетевых приложений - только небольшие исполняемые файлы, поэтому, казалось, нет необходимости включать в развертывание сборку размером в несколько мегабайт, не используемую. Основное приложение большое и многофайловое с самого начала, поэтому это не имеет значения)

Редактировать : обнаружена проблема. На самом деле в сборке не было CopyLocal = false. Он использовал файл .targets, чтобы удалить его во время сборки

<Target Name="PreventConstantsCopyLocal" AfterTargets="ResolveReferences">
    <ItemGroup>
        <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" 
                                 Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'MyConstants'" />
    </ItemGroup>
</Target>

Я просто добавил дополнительное условие

And ('%(MSBuildRuntimeType)' == '' Or '%(MSBuildRuntimeType)' == 'Full')

, чтобы константы копировались в выходные данные в сборках ядра.

1 Ответ

0 голосов
/ 15 марта 2020

Отказ от ответственности Как правило, вы всегда должны использовать CopyLocal = True, если ссылка не содержится в GA C (глобальный кэш сборок).

Проблема: Когда вы используете сборку с установленным CopyLocal = false, это означает, что сборка (файл .dll) не будет помещаться в выходной каталог того, что вы только что создали.

Что происходит дальше заключается в следующем: как только отсутствующая сборка используется где-то в вашем исполняемом коде, среда выполнения попытается загрузить ее. for. Net Framework, это происходит очень специфично c way .

Это отличается от dotnetcore. У них нет GA C, но есть нечто, называемое Магазин пакетов времени выполнения

Решение:

Возможно Есть ли любой эквивалент GA C для. NET Core?

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