Можно ли использовать Fody и его плагины с .NET Core (3.0)? - PullRequest
0 голосов
/ 24 сентября 2019

Как видно из названия, у меня возникают проблемы с получением Fody и плагина Fody.PropertyChanged для работы в .NET Core 3.0 или любой другой версии .NET Core.Чтение вопросов на соответствующих страницах GitHub не отвечает на мой вопрос, и я не могу найти соответствующие ответы.

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

The target process exited without raising a CoreCLR started event.
Ensure that the target process is configured to use .NET Core.
This may be expected if the target process did not run on .NET Core.
The program '[21820] CalculationToolsApp.exe' has exited with code -2147450749 (0x80008083).

Есть предложения?

РЕДАКТИРОВАТЬ: Я обнаружил, что я (может быть,) нельзя использовать «Fody.Costura» с «Fody.PropertyChanged», например, в файле FodyWeavers.xml:

<Weavers>
  <PropertyChanged />
  <Costura />
</Weavers>

Что не должно быть проблемой, потому что с .NET Core я могу создать один файлприложение в любом случае.Удаление ссылки Costura из файла FodyWeavers.xml решило мою проблему!

1 Ответ

1 голос
/ 25 сентября 2019

должно работать.Fody совместим со стандартом .NET.

  • Создайте новое приложение WPF с помощью шаблона WPF App (.NET Core) в Visual Studio 2019 или с помощью команды dotnet new wpf
  • Установите Fodyи PropertyChanged.Fody пакеты NuGet
  • Добавить в проект файл с именем "FodyWeavers.xml" со следующим содержимым:

    <Weavers>
        <PropertyChanged />
    </Weavers>
    
  • Сборка

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

public string GivenNames
{
    // Method get_GivenNames with token 06000009
    get
    {
        return this.<GivenNames>k__BackingField;
    }
    // Method set_GivenNames with token 0600000A
    set
    {
        if (string.Equals(this.<GivenNames>k__BackingField, value, StringComparison.Ordinal))
            return;
        this.<GivenNames>k__BackingField = value;
        this.<>OnPropertyChanged(<>PropertyChangedEventArgs.FullName);
        this.<>OnPropertyChanged(<>PropertyChangedEventArgs.GivenNames);
    }
}
...