C#使用SqlCipher以及使用Costura.Fody合并DLL进EXE

本文介绍了如何在C# Windows桌面应用中使用SqlCipher加密SQLite数据库,以及通过Costura.Fody将DLL合并到EXE文件中。在.NET Framework 4.6.2环境下,详细阐述了设置项目属性以支持长路径,安装并配置SqlCipher和Costura.Fody的过程,并解决了因首选32位导致的问题。同时,指出了在使用Costura.Fody时需要注意排除特定DLL以避免运行时错误。

创建C# Windows 桌面 窗体应用

在这里插入图片描述
框架.NET Framework 4.6.2
在这里插入图片描述

使程序支持长路径

4.6.2以后才System.IO模块才开始支持长路径
参看:
https://www.cnblogs.com/zerodai/p/10224946.html#idx_13
https://devblogs.microsoft.com/dotnet/announcing-net-framework-4-6-2/

默认项目属性的BUG

项目属性->生成->下面这个勾(首选32位)一定要去掉 一定要去掉 一定要去掉 这是个VS默认设置的BUG 不去掉这个 简单的获取文件大小就会出现问题
在这里插入图片描述
在勾选上首选32位后,测试如下代码:

        private void button1_Click(object sender, EventArgs e)
        {
   
   
            System.IO.FileInfo fi = new System.IO.FileInfo(@"c:\windows\regedit.exe");
            MessageBox.Show(Convert.ToString(fi.Length));
        }

在这里插入图片描述
实际大小为 357888:
在这里插入图片描述
去除首选32位后就正常了
在这里插入图片描述

使用NuGet

在这里插入图片描述

SqlCipher的使用

用途:加密SQLite数据库

加载方法:
搜索SqlCipher 发现有3个相关

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
区别暂不清楚,目前使用作者为官方SQLite-net
URL:https://github.com/praeclarum/sqlite-net
加载后会自动引入一大堆相关的DLL
在这里插入图片描述
SQLitePCLRaw.lib.e_sqlcipher.2.0.3
System.Buffers.4.4.0
System.Numerics.Vectors.4.4.0
System.Runtime.CompilerServices.Unsafe.4.5.2
System.Memory.4.5.

.NET 生态中,除了 **Costura.Fody** 之外,还有多种工具可以用于将多个 DLL 合并为一个程序集或嵌入到主程序中。以下是几种常见的替代方案: ### ILMerge ILMerge 是由微软开发的命令行工具,能够将多个 .NET 程序集合并为一个 DLLEXE 文件。它支持 .NET Framework 项目,并且可以通过 NuGet 安装使用。 ```bash ilmerge /out:Merged.dll PrimaryAssembly.dll Dependency1.dll Dependency2.dll ``` ILMerge 的优势在于其稳定性和兼容性,尤其适合传统 .NET Framework 应用程序[^3]。 ### ILRepack ILRepack 是基于 Mono.Ceil 的开源工具,功能与 ILMerge 类似,但支持更多现代 .NET 特性,如 .NET Standard 和 .NET Core。它是跨平台的,并且可以在构建过程中通过 MSBuild 集成。 ```bash ilrepack /out:Merged.dll PrimaryAssembly.dll Dependency1.dll Dependency2.dll ``` ILRepack 提供了更灵活的配置选项,例如符号文件处理和强名称签名支持[^3]。 ### Fody(其他插件) Fody 是一个基于 MSBuild 的织入工具,除了 Costura.Fody 以外,还支持其他插件来实现不同的代码处理目标。例如: - **ScatterFody**:用于将资源分散到多个 DLL 中。 - **ManifestResourceFody**:用于自定义资源嵌入方式。 这些插件虽然不直接提供 DLL 合并功能,但在某些场景下可以辅助完成依赖管理[^1]。 ### .NET Core 3.0 及以上版本的 PublishSingleFile 对于 .NET Core 3.0 及更高版本(包括 .NET 5、.NET 6),可以使用内置的 `PublishSingleFile` 属性将应用程序及其所有依赖项打包为一个单独的可执行文件。该方法适用于发布原生单文件应用,但它生成的是 EXE 文件而非 DLL。 ```xml <PropertyGroup> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <PublishSingleFile>true</PublishSingleFile> </PropertyGroup> ``` 此方法无需额外工具,直接通过 SDK 支持,是部署现代 .NET 应用程序的理想选择[^3]。 ### SourceYard SourceYard 是一种源代码包管理工具,允许将多个项目的源代码合并为一个库。它不同于传统的 DLL 合并工具,而是通过 NuGet 包的形式将源代码注入到目标项目中,从而避免运行时依赖问题。 这种方式特别适用于需要深度集成依赖源码的场景,而非简单地合并编译后的 DLL
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值