草庐IT

DLL_EXPORT

全部标签

c# - 传递依赖导致同一 DLL 的版本冲突

.NET世界中管理导致版本冲突的传递依赖项的最佳实践是什么?详情:项目A依赖于项目B,而项目B又依赖于库C还有项目A还依赖于项目X,后者依赖于库C的不同且(可能)不兼容的版本。A->B->Cv1.0&A->X->Cv2.0其中Cv1.0Cv2.0有没有办法让它工作?可以不使用GAC来完成吗?即使B和X只是二进制格式(无法访问源代码)也能做到吗?换句话说,有没有一种方法可以让项目B和X在项目A中一起使用时各自使用它们自己的依赖项,而不会引起冲突。注意:我意识到理想情况下我根本不应该遇到这个问题,但随着对外部库的依赖不断扩大,这将是一个不可避免的副作用。所以我想知道应该如何最好地处理它。

c# - 处理内存泄漏的非托管 dll

我有一个c#应用程序,它依赖于第三方非托管程序集来访问某些硬件。非托管代码存在内存泄漏,每次访问后内存消耗将增加~10mb。问题是已知的;没有错误修正可用。有没有一种方法可以让我在不定期重启的情况下继续使用这个程序集?我尝试创建一个单独的AppDomain,通过appDomain.CreateInstanceAndUnwrap()将有问题的代码加载到该AppDomain中,然后通过AppDomain.Unload()卸载该域.然而,这显然不会释放该域使用的非托管内存,只会释放托管内存。我还可以将应用程序拆分为两个独立的部分,然后仅重新启动具有非托管dll的部分。然而,这将意味着重大的重

c# - 在 C# 中处理共享 dll 的最佳方法是什么?

在我的团队中,我们有数百个共享dll,其中许多还引用其他dll,而这些dll本身又引用其他dll,等等。我们已经开始为所有我们认为足够通用以用于其他项目的dll使用“共享”目录,例如数据库通信dll。问题是如果其中一个dll一直沿树向下更改,那么引用它的所有内容都需要重新编译以避免版本控制问题(在运行时发生)。为了避免这种情况,现在有人讨论将我们所有的“共享”dll添加到一个大程序集中,任何创建新应用程序的人都只需引用它,并且仅引用它。这显然会变得越来越大,我不确定这是否是最好的方法。有什么想法吗? 最佳答案 我们所做的是将共享DL

c# - 从 C# DLL 动态获取代码

我想看看DLL(可能在不同机器上编译)是否相同。为此,我正在做的是加载DLL并计算MD5,这因DLL在不同机器上失败(但具有相同的源)而失败。这似乎是由于在编译时添加了其他元数据(正如有人提到的here)。我想对整个DLL进行逆向工程,看看代码是否匹配,但是,我有两个问题:我只能找到执行此操作的工具,我似乎找不到C#库或类似的东西来满足我的需要。我不能100%确定反编译的源代码在不同机器上编译的源代码是否相同。如有任何提示、提示和指点,我们将不胜感激。 最佳答案 您可能是对的-它可能是元数据。不过,我认为这不一定是最有可能的可能性。

c# - 为什么 Urlmon.dll 的 FindMimeFromData 函数会为许多文件类型返回 MIME 类型 “application/octet-stream”?

为什么Urlmon.dll的FindMimeFromData函数会为许多文件类型返回MIME类型“application/octet-stream”,而通过文件扩展名(即针对Windows注册表)检查MIME类型会返回更精确的类型?例如,mp3是“application/octet-stream”而不是“audio/mp3”。基本上,我想验证一个扩展名不正确的上传文件。这种方法似乎适用于许多图像文件、xml等。问题类似于thisone,但提供的解决方案不适合验证上传的文件,因为返回了不同/不明确的MIME类型。 最佳答案 阅读Fin

c# - "skipped loading symbols for ngen binary"用于 C# dll

我正在尝试从nativeC++可执行文件调试C#dll。我有一个C#COM对象,它通过IDispatch从native代码加载和运行。一切都在调试中构建,包括C#和C++代码。虽然我可以看到所有的c++代码,并且所有的c++dll都加载了它们的符号并可用于调试、断点等,但C#代码拒绝播放。我看到的是C#dll都拒绝加载它们的符号pdb,并在模块窗口中报告“skippedloadingsymbolsforngenbinary”。顺便说一句,我在这里调试C#解决方案,我在COM项目的调试设置中将native可执行文件设置为“启动外部程序”。现在我可以启动C++可执行文件,然后附加到它,然后

c# - 使用不同版本的引用 DLL

不知何故,我很幸运,从来没有遇到过这个问题,尽管我认为这是一个常见的问题:我有一个网络项目,我们称它为SomeProject。SomeProject引用了第3方库,我们称它为SomeThirdParty,版本1.0。SomeProject还引用了一个本地类库,我们称它为SomeLibrary。SomeLibrary也有对SomeThirdParty的引用,但版本不同(比如2.0)。SomeThirdParty的1.0版和2.0版共享大部分相同的签名,但实现方式不同。如果可能,我需要SomeProject来使用1.0实现,并且需要SomeLibrary来使用2.0实现。我编译SomePr

c# - 为 .dll 生成初始化代码

我最近听说.dll可以在加载后立即运行代码,例如,当加载引用.dll的应用程序时。尽管我自己做了一些测试并尝试在这里和在Google上寻找答案,但我无法找到某种方法来为.dll生成初始化方法。我想知道当应用程序加载.dll时是否真的可以运行代码。如果可以,我该怎么做? 最佳答案 警告(感谢BenVoigt的捕获:)):下面的代码仅适用于C#保证生成的类不会是beforefieldinit。但是使用C++/CLI应该不会那么容易:ManagedC++StaticConstructornotcalledin.net4所以正如我的评论中所

c# - 如何解决 .NET Dll Hell?

如何修复?我有2个第3方程序集,它们使用NewtonSoftJson.dll。问题是其中一个使用较旧的3.x.x,另一个使用4.5.x。因此在运行时,2个程序集中至少有1个提示另一个。我该如何解决这个问题?我可以设置服务,但代码和环境目前不是这样设置的。在给定时间内安全完成的重构也太多了。 最佳答案 我碰巧遇到了Newtonsoft和另一个第三方库的确切问题。Newtonsoftv3.x和v4.x的问题是较新的库现在带有公钥token。这使得程序集重定向解决方案无用;但对于大多数其他情况,它是一个完全有效的解决方案。我最终自己重新实

c# - 从已编译的 DLL 中获取所有 XAML 文件

我想在运行时从第三方库(DLL)加载外部XAML样式。喜欢thistutorial他们使用:Application.LoadComponent(newUri("/WpfSkinSample;component/Skins/"+name+".xaml",UriKind.Relative))asResourceDictionary;加载新样式。但我不知道来自第三方库的XAML名称,所以我正在寻找一种方法来获取它们并将它们加载到我的应用程序中。感谢您的帮助。编辑:感谢andyp,我做了以下工作:publicvoidLoadXaml(StringAssemblypath){varassembl