Fody 及其插件可以与 .NET Core (3.0) 一起使用吗?

Can Fody and its plugins be used with .NET Core (3.0)?

如标题所述,我无法 Fody, and the plugin 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).

有什么建议吗?

编辑:我发现我(也许)不能在 FodyWeavers.xml 文件中像这样将 "Fody.Costura" 与 "Fody.PropertyChanged" 一起使用:

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

这应该不是问题,因为使用 .NET Core 我无论如何都可以创建单个文件应用程序。从 FodyWeavers.xml 中删除 Costura 引用解决了我的问题!

应该可以。 Fody 与 .NET Standard 兼容。

  • 使用 Visual Studio 2019 中的 WPF App (.NET Core) 模板或使用 dotnet new wpf 命令
  • 创建新的 WPF 应用程序
  • 安装 FodyPropertyChanged.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);
    }
}

Costura 也不能在 wpf 和 .net core 3.1 中工作。 在 .net core 3.1 中,您可以改用它:

  • 构建 -> 发布 -> 创建配置文件 -> 编辑“配置”
  • 目标运行时 = win-x64(或任何你想要的目标系统,但不是“可移植的”)
  • 展开“文件发布选项”
  • 检查:生成单个文件
  • 保存

当您现在选择构建 -> 发布 -> 发布按钮时,它将创建单个文件。

他们似乎是因为 .net core 的“单文件可执行文件”特性而停止了 costura 项目。尽管此功能仍落后于 costura,因为您必须设置目标运行时。

https://github.com/Fody/Costura/issues/442

In dotnet core 3 there are two new features

Single-file executables
Assembly linking

With these features included in the dotnet tool set, the value proposition of Costura is greatly diminished. With that in mind I think long term Costura should cease to be used as people transition over.

Please comment with any input.

Plan:

disable issues
PR will still be accepted but only for bug fixes
add note to readme
add note to nuget description
write a warning in 

.NET 5 更新:
对于 .NET 5 和当前 visual studio 版本 16.10.2,向导已更改。尽管我检查了单个文件等的选项,但我无法让它与向导一起工作。但是使用控制台工作:工具 - >命令行 - >开发人员命令提示符 - >输入:

dotnet publish -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeAllContentForSelfExtract=true