首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在干净的构建之后生成了不同的dll,没有代码更改?

在干净的构建之后生成不同的dll可能有多种原因,包括依赖项的改变、编译器优化或dll版本的不兼容等。以下是几种可能的原因和解决方案:

原因1:代码依赖项的改变

解决方案:确保所有相关的依赖项在干净的构建后进行更新,可以通过手动更新或使用构建工具自动更新它们来实现。

原因2:编译器优化

解决方案:一些编译器可能会进行优化,导致生成的dll与之前的版本不同。可以尝试使用不同的编译器或禁用优化来解决这个问题。

原因3:dll版本的不兼容

解决方案:如果使用了对旧版dll的依赖项,那么在干净的构建之后,可能需要手动更新dll的版本以保持一致。

总之,不同的dll可能是由于多种原因造成的,需要仔细检查和调试代码以找到具体的问题所在,同时确保依赖项和dll版本与之前的版本保持一致。可以借助调试工具和日志记录来加速这个过程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet core 应用是如何跑起来的 通过自己写一个 dotnet host 理解运行过程

而运行时本身需要在 dotnet 的托管代码执行之前热起来,运行时的启动部分代码也是一个被构建为本机代码的模块 那在咱双击一个 dotnet 应用构建出来的 exe 时,到底发生了什么?...,可以了解在 dotnet 启动之前需要做哪些步骤 在开始之前,我推荐大家拉下我的代码到本地,通过自己更改实际修改代码可以理解整个 dotnet 的启动的 Native 部分逻辑 本文放在 github...如果看到只是一闪而过,还请在适当地方添加断点哈,因为 C++ 程序在 VS 上没有做和 C# 一样的优化,在执行完成之后不退出控制台 如果能运行成功,可以看到如下界面 ?...在跑起来之后,可以先看看这个项目里面的代码和注释 咱按照代码的顺序,一步步告诉大家这是在做什么 官方的例子被我进行了一些魔改,原因是本文的这个代码是微软官方的例子,但是微软在 dotnet 5 时删除了这个例子...hr = runtimeHost->Start(); 在完成了运行时的启动之后,就可以来创建 AppDomain 来运行咱的业务端的 dotnet 托管代码了 在 dotnet 里面有一个概念是程序集,

55310

安全研究 | 使用ScareCrow框架实现EDR绕过

当DLL加载器加载进内存中之后,将会使用一种技术来将EDR钩子从正在进程内存中运行的系统DLL中清理掉,这是因为我们知道EDR的钩子是在这些进程被生成时设置的。...ScareCrow可以通过使用API函数VirtualProtect来在内存中对这些DLL进行操作,该函数可以将进程的内存权限的一部分更改为不同的值,特别是将Execute-Read修改为Read-Write-Execute...这些DLL存储在EDR挂钩的“干净”磁盘上,因为系统使用它们在生成新进程时会将未更改的副本加载到新进程中。由于EDR只在内存中设置这些进程钩子,所以这部分数据将保持不变。...根据指定的加载程序选项,ScareCrow会为DLL设置不同的导出函数。加载的DLL也不包含所有DLL通常需要操作的标准DLLmain函数,不过我们不需要担心DLL的执行会出现问题。...代码样例 在加载器的创建过程中,ScareCrow会使用到一个代码库,这个库会做两件事情: 代码对加载器进行签名:使用代码签名证书签名的文件通常受到较少的审查,这样就更容易执行而不会受到质疑,因为使用受信任名称签名的文件通常比其他文件更不可疑

1K20
  • 使用虚幻引擎自动化工具实现自动化部署

    共有三种不同的Engine类型,它们需要对命令行进行一些更改,具体取决于所使用的类型。 第一个也是最常见的引擎类型是所谓的 Rocket build。...这种构建类型是您从 GitHub 克隆或下载虚幻引擎的 repository 时获得的。这是最通用的引擎类型,因为可以更改和重新编译引擎的源代码。...最后一个工具就是我们所需要的进行自动部署的工具 Unreal Build Tool (UBT),它是在引擎内部构建源代码的主要工具。...当尝试仅使用 UAT 打包项目时,由于缺少项目的编辑器 dll,它将失败(在项目的干净版本上)。要创建缺少的 dll,我们需要使用 UBT 为我们的项目构建编辑器目标。...Development .uproject -WaitMutex 对于干净的构建,可以在构建脚本之前运行 Clean 脚本,也可以使用 Rebuild 脚本代替构建脚本

    2K10

    记将一个大型客户端应用项目迁移到 dotnet 6 的经验和决策

    虽然我现在说的是我用了五周的时间就完成了,但实际上在此前的准备工作是没有被我算上的。此前的工作包括什么?...随着用户量越来越大,这部分的客服成本也越来越大。这也就是为什么有能投入到如此多资源来更新项目的原因之一 原本的应用开发架构分层如下图 在更新到 dotnet 之后,运行时是在系统层的上方。...这就是以上代码可以使用定制的 WPF 程序集替换 dotnet 的 SDK 带的版本的基础支持 由于在实际发布的时候,在服务器构建,为了减少在用户安装之后的文件夹体积,就期望不使用在入口程序集引用定制版本的程序集的输出的文件...因此需要对入口程序集的引用代码进行优化,设置在服务器构建时,不输出 实现方法就是在服务器构建时,通过 msbuild 参数,设置属性,在项目文件判断属性了解是否服务器构建,如果是服务器构建就不进行引用程序集...这就是为什么当前不使用第一个方法的原因 尝试第二个方法: 在 入口程序集 里面,引用 WPF 定制版本的程序集,此时将会在开发构建被输出,在开发运行被引用。

    1.6K10

    WPF 框架开发 加入 InternalsVisibleToAttribute 特性让其他程序集可以访问 internal 权限成员

    在 WPF 框架开发中,其实很少有开发者有足够的勇气去更改现有的框架逻辑,因为 WPF 的功能十分庞大,很难测试全。更多的开发都是加功能以及开放已有功能。...而一次 WPF 框架的构建需要 20 分钟 因为我在 WPF 框架的定制开发中,更多的是访问 internal 权限成员添加新的类等,我几乎没有想去更改现有的逻辑。...下一步就是将这个 WPF 仓库构建一下,可以使用命令行方式构建,详细请看 手把手教你构建 WPF 框架的私有版本 在构建完成之后,从 WPF 的 artifacts 文件夹里面,可以在 artifacts...其实在 WPF 中使用 x86 或 x64 构建的不同就是 runtimes 文件夹内的文件而已 现在就构建完成了 Lib 自己定制版本的依赖文件了,接下来就是将 dotnetCampus.WPF 程序集拷贝出来...\Lib\WindowsFormsIntegration.dll" /> 现在尝试在 dotnetCampus.WPF 程序集内写代码,这里的代码可以访问 WPF 框架的

    57220

    我在软件工程师生涯中犯下的七个错误

    一般来说,我不会在犯错的当时就意识到自己做错了什么事情;我往往是在接触了正确的做事方式之后才知道自己之前的路走岔了。...更新代码是必要的,但更新 XML 文档就不是那回事了:这是一种负担,它只会浪费你的时间,而且毫无意义。到最后,我在更改 XML 文档时失去了耐心,转而去做其他更有意义的事情。...5没有自动构建 应用程序部署和打包工作相对来说比编写代码更容易一些,所以我把这两件事情放在了很低的优先级上。很快,我就收到了所有人的抱怨,他们都说构建无法正常工作。“缺少先决条件,如何解决这个问题?”...“dll 没有更新,你能给我发个补丁吗?”“为什么图标都跑掉了?”电话像雪崩一样打到了我的办公桌上。 那一天结束的时候,我已经筋疲力尽了。...我以为单元测试是为了一些大而复杂的事情准备的,而不是我做的那种小型应用程序。这样做的结果是我的应用程序变成了一个怪物(没有关注点分离、难以重构和完全无法维护的代码库)。

    60610

    完整部署运行时库

    运行时库是软件运行时必需依赖的一系列DLL,最常见的是VC运行时库(比如msvcrt.dll),如果有用到MFC还需要依赖MFC库。...软件包没有带运行时库时,为什么有些机器运行正常,有些机器启动不起来?...这是因为不同的机器部署的运行时库的情况可能不一样,比如Windows系统都已经自带了VC6的运行时库,软件包无需自带,而visual studio 2017开发的运行时库在Win7上肯定是没有的,毕竟前者在后者之后发布...如果幸运的话,你的机器安装其他软件时,该软件把运行时库给部署安装了,你的软件就能正常运行。正是因为不同机器的运行时库不同,我们在软件第一次发布的时候要在干净的机器上测试运行,保证都能正常启动。...因为没有完整部署运行时库,运行时库除了常见的msvc开头的dll,还包括api-ms-win-core开头的dll,操作系统可能没有api-ms-win-core开头的dll,也可能有但版本不对导致软件无法启动

    64810

    世间本无完美代码,不要苦苦追寻了

    我们知道我们应该写干净的代码,代码应该一致、清晰也要尽可能简单。 有些人把这变成了极端,他们迫使自己写出美丽、优雅、接近完美的代码,痴迷于重构并且纠结每个细节。...它不需要干净并紧凑 —— 只要干净就够了。代码中复制和粘贴和其他小的裁剪是允许的,至少在某种程度上是这样的。这些是永远不需要打磨的代码。...即使周围的其他代码正在更改,这些也是不需要重构的代码(除非你需要更改它)。这是不值得花费额外时间的代码。 你一直在改变的代码怎么样了呢?...代码写来是被修改的 —— 这就是为什么它被称为“软件”。 “经过五年的使用和修改,成功的软件程序的源码通常完全认不出它原来的样子,而一个成功建筑五年后几乎没有变化。”...软件构建从没有止境。即使设计和代码是正确的,它们也可能只是一段时间内正确,直到环境要求再次更改或替换为更好的东西。 我们需要编写好的代码:代码可以理解、正确、安全和可靠。

    97690

    Git 不能只会 pull 和 push,试试这5条提高效率的命令吧!

    stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。 应用场景 我猜你心里一定在想:为什么要变干净?...当你修复完线上问题,切回 feature 分支,想恢复代码也只需要: git stash apply   相关命令 > 基于微服务的思想,构建在 B2C 电商场景下的项目实战。...cherry-pick 描述 给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。...revert 描述 给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。...再来看下最新的 log,生成了一条 revert 记录,虽然自己之前的提交记录还是会保留着,但你修改的代码内容已经被撤回了。

    42140

    总结到目前为止发现的所有EDR绕过方法

    因此,在调用真实的Windows API函数代码之前,需要进行分析。如果此分析没有导致可疑/恶意行为,并且返回了干净的结果,则随后将调用原始Windows API函数。...此技术的一个缺点是,您可能必须为每个不同的AV/EDR更改补丁。它们不太可能在同一点的相同功能之前都放置一条附加的JMP指令。他们很可能会hook不同的功能,并可能在其补丁程序中使用其他位置。...通过反汇编ntdll.dll文件,可以获取其中包含的每个函数的汇编代码。 这里的一个问题是,在Windows OS版本之间,有时甚至在Service Pack /内部版本号之间,汇编代码有时有所不同。...要使用此技术,您需要了解项目所需的确切NTDLL.dll函数,并通过反汇编为它们提取相应的汇编代码。之后,您需要构建一个ASM文件,其中包含针对不同Windows OS版本的所有不同偏移量。...注入Shellycoat之后,您可以注入您的植入代码,钩子将不再检测到该代码。Slaeryan还介绍了使用Pros&Cons在回购中如何解除NTDLL.dll的钩挂的不同方法,值得一读。

    9.4K31

    (转载非原创)从新建文件夹开始构建UtopiaEngine(2)

    把这项目这样晾着显然不符合本人的风格,而且要作为毕业设计的东西可不能蒙混过关。所以现在成了既要准备研究生考试又要忙于设计框架并编码的情况,生活已经充实到必须得抽空来写blog了。...还有一件事,就是我们的引擎现在的构建步骤可能要与我曾经参考的Cherno大佬的不同了,其中一个原因是因为他的game engine系列还在更新,对代码的修改也相比刚开始有很大区别,目前榛子引擎架构只有大体上与曾经视频中讲述的一致...,具体代码实现有许多部分已经不同了。...:即声明与定义可以在不同的文件里面。...完成此步骤之后,让我们开始编写相关代码。

    86100

    编程魔法的麻瓜入门手册——《一路编程》

    在这本书中你可以学到: • 如何简化及自动化诸多编程工作 • 在程序中处理不同类型的数据 • 使用正则表达式查找和处理模式 • 编写能够决定该做什么、什么时候做的程序 • 使用函数编写干净、简洁的代码...然而激动并没有延续很久,过了两天,当大家准备把各自写的代码合到一起时,发现这是个根本无法完成的任务,每个人都有自己的想法,从代码组织方式,到代码风格,甚至连IDE都不一样。...进组的第一天,我就拿到几张纸,上面写着一些基本的编码规范。分配给我的电脑上环境已经准备好,从TFS上签出项目代码,在项目文件中的编译选项已经配置好,直接运行编译,之后执行脚本就可以将服务跑起来。...当然,这才是开始,后面从代码提交,到工作项分配,再到上线部署,每一件事都在刷新着我对软件开发的理解。不过,作为一个小小的实习生,那时的我只想安安静静地写代码,没有仔细思考这些专业工作背后的意义。...当然也不乏一些在日常工作中有思考,能够理解软件开发的痛点,但是苦于不知道如何改进的程序员。因为从来没有人告诉他们怎么做才是正确的编程方式。

    1.3K60

    windows10 记事本进程 键盘消息钩子 dll注入

    ) 接下来我们一步步实现看看: 一、DLL编写 1、打开VS新建一个名为DLL的Win32 项目: 2、在应用程序向导中选中DLL、空项目(空项目比较干净,没有多余的东西): 3、创完了项目,先别急着写代码...将MFC的使用改为“在共享DLL中使用MFC”,原因是dll中会用到CString类型,要加入#include 这个头文件,如果不设置MFC的话,之后编译会报错;将字符集改为“使用多字节字符集...”,及ANSI,原因是在ANSI和Unicode下,CSting的存储结构是不同的,前者是char *,后者是wchar_t *,而且字符集不同,有些函数的参数也会跟着变,这个后面会说。...8、在源文件目录下新建一个名为DLL的def文件: 9、添加如下代码,可以将KeyboardProc函数导出: LIBRARY DLL EXPORTS KeyboardProc 整个项目下只有“源文件...至此第一部分就算完成了,我们得到了DLL.dll这个文件。

    1.8K10

    苏州 开源自主的 dotnet 生态

    启动器的作用就是让 dotnet 运行时跑起来,启动器需要对不同的平台构建不同的版本,作为应用的入口。在启动了运行时之后,将进行 JIT 解析执行 IL 内容,执行应用的逻辑。...我特别推荐大家将 Roslyn 开源仓库拉下来,自己构建一下,用自己构建出来的 Roslyn 编译器来编译自己的代码。这样做过一遍之后,相信大家将会对整个 dotnet 的开源体系有更深的理解。...在 2020 年,其实自己基于开源的 Roslyn 定制一个属于自己的编译器没有想象中那么难,而 Roslyn 编译器的开源协议是最友好的 MIT 协议,这意味着咱可以对整个开源仓库进行自由的更改 (这将允许任何人任何组织和企业任意处置...编译器编译 C# 代码之后,如果咱不耍什么如 dotnet Native 等黑科技,那咱编译 C# 代码的输出文件将会是一个包含 IL 的 DLL 文件。...启动器的作用就是让 dotnet 运行时跑起来,启动器需要对不同的平台构建不同的版本,作为应用的入口。在启动了运行时之后,将进行 JIT 解析执行 IL 内容,执行应用的逻辑。

    97720

    记一次IIS-Raid后门应急经历

    ,在 19点 左右入侵者搜索360安全卫士并且下载了安装包进行了安装,一开始不了解为什么会这样做,如果要搞隐蔽为什么要有这么大的动静?...,发现删掉了很多 autohbas.dll 也就是那个IIS后门,之后的 svchost.exe 猜测是远控或者其他的后门,发现在19点之后,也就是安装了360之后就没有日志,通过这里可以知道,攻击者安装...\ 下,不是在webshell的路径\photo\temp\ 下,哪怕是正常的图片也无法传到这个目录来,不知道代码对于图片的处理逻辑,且后台和前台的一些图片也被上传到了目录,百思不得其解,很没有道理 后来灵机一动...如果更改了 .dll 文件,并将它的新版本写入到了 Bin 文件夹中,则 .NET 会检测到更新,并对随后的新页请求使用新版本的 .dll 文件 3).NET 内存马,参考文章: https://tttang.com...,导致痕迹没有清理干净;最终的入侵目的是为了搞寄生虫和关键词排名,入侵者后来留的这些后门基本都被卡巴斯基查杀,但是寄生虫程序已经运行且已经被百度蜘蛛爬取到,只能第一时间去做快照和关键词举报 0x05

    1.7K10

    1% 顶尖工程师的 7 个简单习惯

    代码是为人类服务的,而不仅仅是为计算机服务的。 代码是为您团队中的工程师编写的,他们阅读、维护并在您的代码之上进行构建。...他们不怕删除代码并重新开始,即使他们已经完成了 90%,如果这意味着最终结果总体上会更好。 代码不是个人的,因此我们会从容地接受反馈。 代码并不完美。没有人关心完美的代码。他们关心带来改变的代码。...测试强制代码的清晰度和可预测性。他们提供信心。良好的自动化测试允许团队对代码进行更改,而不必担心破坏看不见的东西。 好的代码是可预测的。 某些类型的测试包括: 单个组件和隔离功能的单元测试。...为什么这不符合我们的标准?”。 然后,他们将花费 20 小时重新编码以符合标准,只是为了得出与以前相同的结论。听起来有点熟? 软件开发的现实是,并非所有代码都能干净或完美遵循规则。...然而,它可以是一致的、干净的、可理解的、可测试的和有价值的。 我注意到这些工程师的其他模式,我将在将来写到: 至少在一个领域有深厚的领域知识。

    18310

    Git 不要只会 pull 和 push,试试这 5 条提高效率的命令

    stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。 应用场景 我猜你心里一定在想:为什么要变干净?...cherry-pick 描述 给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。...revert 描述 给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。...再来看下最新的 log,生成了一条 revert 记录,虽然自己之前的提交记录还是会保留着,但你修改的代码内容已经被撤回了。...使用刚刚同样的 revert 方法,会发现命令行报错了。 为什么会这样?在官方文档中有解释。 通常无法 revert 合并,因为您不知道合并的哪一侧应被视为主线。

    1.2K20

    Git 不能只会 pull 和 push,试试这5条提高效率的命令吧!

    stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。 应用场景 我猜你心里一定在想:为什么要变干净?...cherry-pick 描述 给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。...revert 描述 给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。...再来看下最新的 log,生成了一条 revert 记录,虽然自己之前的提交记录还是会保留着,但你修改的代码内容已经被撤回了。...使用刚刚同样的 revert 方法,会发现命令行报错了。 为什么会这样?在官方文档中有解释。 通常无法 revert 合并,因为您不知道合并的哪一侧应被视为主线。

    62120

    Git 不要只会 pull 和 push,试试这 5 条提高效率的命令!

    stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。 应用场景 我猜你心里一定在想:为什么要变干净?...图片 cherry-pick 描述 给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。...revert 描述 给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。...图片 再来看下最新的 log,生成了一条 revert 记录,虽然自己之前的提交记录还是会保留着,但你修改的代码内容已经被撤回了。...图片 使用刚刚同样的 revert 方法,会发现命令行报错了。为什么会这样?在官方文档中有解释。 通常无法 revert 合并,因为您不知道合并的哪一侧应被视为主线。

    16310
    领券