Загрузка внешней сборки .NET Standard 2.0 с помощью блейзера

Переменная salary - это просто копия значения из data. Вы должны изменить исходный список вместо копии. Функция enumerate может генерировать индекс (от 0), необходимый для изменения значения внутри списка.

data = [['Ben', 'Manager', 3000],
       ['James', 'Cleaner', 1000],
       ['Ken', 'Supervisor', 2000]]

for i, (name, appt, salary) in enumerate(data):
    if name == 'James':
        data[i][2] = 1500
        print(data[i])

Выход: ['James', 'Cleaner', 1500]

2
задан Sigge 20 January 2019 в 01:14
поделиться

1 ответ

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

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

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

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

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

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
</Project>

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

<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
        <RunCommand>dotnet</RunCommand>
        <LangVersion>7.3</LangVersion>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="0.7.0" PrivateAssets="all" />
    </ItemGroup>
</Project>
[ 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» в моносовместимую.

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

0
ответ дан Sigge 20 January 2019 в 01:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: