Windows使用Costura.Fody编译合一包

常见项目默认编译后文件夹中有多个文件,缺少一个就可能运行错误。使用Costura.Fody后可以编译成一个dll文件或者一个exe执行文件,将所有内容合并到一起。

1、在项目中使用NuGet添加依赖:Costura.Fody和Fody

添加后生成的项目dll文件会增大很多,就是使用这个库合一的

2、项目根目录下会自动生成FodyWeavers.xml文件,没有则手动添加,基础内容如下,详细配置后面介绍

<Weavers>
    <Costura/>
</Weavers>

# 我的为
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceS>
  <Costura />
</Weavers>

3、配置加载顺序(可能不按预期顺序加载,导致依赖项无法正常初始化)

# 包含顺序内容以换行分隔
<Costura>
    <PreloadOrder>
        Foo
        Bar
    </PreloadOrder>
</Costura>

# 或使用属性配置,用|分隔资源名称
<Costura PreloadOrder='Foo|Bar' />

4、在测试中代码添加对应函数,如在构造函数或main起始添加

CosturaUtility.Initialize();

5、如果你有特定的文件或文件夹需要包含,可以在 FodyWeavers.xml 文件中进行配置

  • IncludeAssemblies 用于指定要包含的特定程序集。
  • ExcludeAssemblies不引用
  • Unmanaged32Assemblies 和 Unmanaged64Assemblies 用于指定未托管的 DLL 文件。
  • Content 部分用于指定要包含的文件和文件夹
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura>
    <IncludeAssemblies>
      MyLibrary.dll
    </IncludeAssemblies>
    <Unmanaged32Assemblies>
      x86\MyUnmanagedLibrary.dll
    </Unmanaged32Assemblies>
    <Unmanaged64Assemblies>
      x64\MyUnmanagedLibrary.dll
    </Unmanaged64Assemblies>
    <Content>
      <Files>
        <File>
          <Path>Resources\MyResourceFile.txt</Path>
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </File>
      </Files>
    </Content>
  </Costura>
</Weavers>

6、包含指定目录多个文件

<Files>
  <File>
    <Path>Debug\*</Path>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </File>
  <File>
    <Path>Release\*.dll</Path>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </File>
</Files>

7、包含xml等配置文件到项目中

1)新建文件夹Costura32和Costura64,将debug中的文件全部拷贝到这里

2)项目》显示所有文件》显示没包含到项目中的文件夹后,鼠标点击后右键》包括在项目中

3)在FodyWeavers.xml文件夹中添加IncludeAssemblies配置要包含的文件目录


<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=">
  <Costura>
    <IncludeAssemblies>
      <Assembly Name="Costura32\*" />
      <!-- 明确指定 Opc.UaFx.Advanced 程序集 -->
      <Assembly Name="..\packages\Opc.UaFx.Advanced.2.33.0\lib\net471" />
      <!-- Opc.UaFx.Advanced -->
    </IncludeAssemblies>
  </Costura>
</Weavers>

使用这个生成的库只能调用该库中提供的函数,我在里面引用了opc服务的库,在外部是无法正常引用的,需要单独引用,类似于只提供对外独立接口,减少打包资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值