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

时间:2019-09-24 19:02:42

标签: wpf .net-core .net-core-3.0 fody fody-propertychanged

正如标题所述,我在使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).

有什么建议吗?

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

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

这应该不是问题,因为使用.NET Core,我仍然可以创建单个文件应用程序。从FodyWeavers.xml中删除Costura参考可以解决我的问题!

2 个答案:

答案 0 :(得分:2)

应该可以。 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);
    }
}

答案 1 :(得分:0)

对于我来说,Costura也无法在带有.net core 3.1的wpf中工作。 在.net core 3.1中,您可以改用以下方法:

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

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

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

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

在dotnet core 3中,有两个新功能

Single-file executables
Assembly linking

在dotnet工具集中包含这些功能后, Costura的提议大大减少了。考虑到我 认为长期的Costura应该在人们过渡时停止使用 结束。

请输入任何评论。

计划:

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