Определите метод расширения.NET с объемом решения

Проведя дальнейшее исследование, я пришел к выводу, что моя проблема в том, что моя внешняя библиотека не связана должным образом с зависимостями mono.net. Вот почему, когда вы создаете приложение Blazor, оно компилируется во второй раз в /dist/_framework/_bin.

Я нашел три возможных решения этой проблемы:

1. Превратите внешнюю библиотеку классов в веб-приложение Blazor

Таким образом, ваше приложение будет автоматически преобразовано в моно -совместимая сборка при сборке. Простой взгляд на Blazor .csproj показывает зависимости, необходимые для достижения этой цели. Чтобы это работало, мне пришлось изменить .csproj моей внешней сборки:

из стандартной библиотеки нестандартных файлов:


    
        netstandard2.0
    

в веб-приложение:


    
        netstandard2.0
        dotnet
        7.3
    
    
        
    

[ 1119] Это единственные необходимые зависимости. При сборке совместимая сборка будет находиться в папке / dist / _framework / _bin. Затем его можно загрузить, используя методы, описанные в вопросе.

Этот работает , но чувствует себя немного хакерским, потому что единственная причина, по которой мы превращаем библиотеку в веб-приложение, состоит в том, что она может скомпилировать себя в правильно связанную сборку.

2. Загрузите монофасад netstandard2.0

Другое решение - разархивировать пакет Nuget из Microsoft.AspNetCore.Blazor.Build и взять файл netstandard.dll. Он находится в папке tools\mono\bcl\Facades. Теперь, когда в основном приложении Blazor выполняется следующее:

var netstandard = await client.GetByteArrayAsync("http://localhost:62633/_framework/netstandard.dll");
var externallib = await client.GetByteArrayAsync("http://localhost:62633/_framework/MyCustomLib.dll");
AppDomain.CurrentDomain.Load(netstandard);
var assembly = AppDomain.CurrentDomain.Load(externallib);

, библиотека немодифицированной netstandard 2.0 MyCustomLib будет загружена без ошибок.

  • Нет необходимости менять его на веб-приложение
  • Этот работает , но он чувствует себя даже более хакерным, чем первое решение, не зная, не произойдет ли это позже по пути. ..

3. Используйте инструменты Blazor Build

Инструменты Blazor Build, которые в настоящее время находятся здесь здесь , имеют команду ResolveRuntimeDependenciesCommand для CLI, которая, кажется, делает именно то, что нужно. веб-приложение Blazor делает, когда оно выводит вывод в / _framework / _bin Я все еще смотрю на то, как это можно использовать для преобразования сборки «non blazor-webapp» в моносовместимую.

Не стесняйтесь комментировать или отвечать с дополнительной информацией. Я оставляю этот вопрос открытым, пока не будет найдено «более чистое» решение.

6
задан Adam Bellaire 8 October 2008 в 20:22
поделиться

4 ответа

Если Вы не хотите создавать целый проект только для дополнительных методов, можно связать тот же файл в отдельные проекты, не копируя файл:

  1. В Проводнике Решения выберите целевой проект.
  2. Выберите Меню проектов.
  3. Выбор добавляет существующий объект.
  4. В диалоговом окне Add Existing Item выберите объект, который Вы хотите связать.
  5. От кнопки Open выпадающий список Добавляет выбор Как Ссылка.
9
ответ дан 8 December 2019 в 13:51
поделиться

Лучший подход должен поместить их всех в единственный проект и создать DLL. Можно затем включать тот проект как ссылку проекта или включать DLL как двоичную ссылку (вероятно, лучший выбор).

5
ответ дан 8 December 2019 в 13:51
поделиться

Вы могли поместить свои расширения в отдельный проект и включать тот проект в каждое новое решение, которое Вы делаете.

Просто будьте осторожны относительно управления версиями, например, когда другие приложения пытаются делать изменения в Ваш дополнительный проект затем всеми проектами, которые используют тот метод, должен быть повторно протестирован.

Scott Dorman корректен в своем сообщении также: если Вы не хотите их, изменился, можно скомпилировать их как, библиотека DLL, которую Вы включаете в свои новые проекты (в противоположность включению нескомпилированного проекта).

2
ответ дан 8 December 2019 в 13:51
поделиться

Создайте проект для своих расширений платформы.NET и ссылку что один проект в каждом из Ваших проектов приложения.Само собой разумеется: любой и весь материал платформы и только материал платформы, входят в тот один проект; материал приложения входит в Ваши проекты приложения.

Вы могли бы также изучить различные библиотеки платформы там, такие как Зонтик, которые предлагают комплекты расширений базовой платформы.

1
ответ дан 8 December 2019 в 13:51
поделиться