问题标签 [fody-costura]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1133 浏览

.net - 是否有任何免费的类似 ilmerge 的工具可以合并 wpf 程序集?

我正在寻找一个免费工具来将我所有的 wpf 应用程序的程序集合并到一个程序集中。通常,我使用 ILMerge,但不幸的是,它不支持合并 WPF 程序集。有没有可以实现这一目标的工具?

商业工具不是我的选择,因为该应用程序是一个开源项目。

最好的问候,
奥利弗·哈纳皮

0 投票
2 回答
3030 浏览

c# - 静态构造函数在同一个appdomain中被调用两次?

这个问题更多的是关于 C#,而不是关于 log4net(我认为)。

我创建了一个自定义附加程序,并让它读取程序之前设置的静态字段。

令我惊讶的是,静态字段被重新初始化,并且设置值没有进入附加程序。

我启动了 debugview 并看到静态构造函数被调用了两次(!)。这在同一个appdomain中不应该是可能的吧?由于 VS 没有在断点上第二次命中,因此只有 debugview 才能揭示这一点。

请注意,这不是关于避免在 log4net 中使用静态变量的问题。我对 log4net 使用什么样的魔法来完成这个感兴趣?

编辑#1

你好乔恩,大粉丝。

我按照要求进一步隔离了它。首先,我从空白开始,朝着暴露错误的目标情况努力。由于我几乎逐个匹配目标字符并且仍然没有复制,所以我反其道而行之。

从错误情况开始,我删除了所有我认为不重要的东西,直到它开始......按预期工作。

当运行时尝试解析 log4net 程序集时,似乎有一些奇怪的事情发生(在调试模式下观察到)

这是我在调试视图中看到的:

[7756] 常规:警告 - 无法解析模块的“log4net”版本。异常:System.NullReferenceException:对象引用未设置为对象的实例。[7756] 在 DebuggerShared.Services.EventArgs.ModuleLoadedInDebuggerEventArgs..ctor(String modulePath, String moduleLoadMessage, Boolean isUserCode, String name, String version) [7756] General: WARN - Failed to parse module's 'FollowUp.Common' version。异常:System.NullReferenceException:对象引用未设置为对象的实例。[7756] 在 DebuggerShared.Services.EventArgs.ModuleLoadedInDebuggerEventArgs..ctor(字符串 modulePath,字符串 moduleLoadMessage,布尔 isUserCode,字符串名称,字符串版本)

并且 VS 在调试模块屏幕中没有显示路径值。现在我是怎么做到的呢?奇怪的是它设法加载了一个程序集,但不能再告诉从哪里 :)

这是孤立的情况,如果我进一步修改它,它就会开始按预期工作。

https://www.sugarsync.com/pf/D6486369_1701716_00940

我仍然对技术细节感兴趣,但是在删除对 log4net 的引用并再次添加它之后,一切又开始工作了。我很高兴它有效,但它让我烦恼的是我没有一个彻底的解释

此外,静态构造函数现在调用了两次,这是有道理的,因为当 log4net 得到它时,类型会再次初始化。

我认为在这个问题上花费更多时间是不值得的,因为我认为解决方案处于一种奇怪的状态,并且理解所有这些都具有边际价值。不过,如果你能想到一些东西来解释这一点,我很乐意在这里。

编辑#2

事实证明,某些程序集确实被加载了两次,包括带有静态构造函数的程序集。稍后我将研究这是如何实现的,但我有一个解决方法,即禁用和启用 Costura。Costura 是一项将所有程序集合并为一个的 msbuild 任务。我并不是说 Costura 是根本原因。csproj/sln 文件很容易处于奇怪的状态。

考虑在未来如何更快地诊断这个问题,我启动了 sysinternals ProcessExplorer。现在我希望看到程序集只加载一次,但我发现它们被加载了两次。似乎这是运行时中的一个错误,仅在 .NET 4 中修复

http://forum.sysinternals.com/why-some-net-assemblies-are-duplicated-in-memory_topic15279.html https://connect.microsoft.com/VisualStudio/feedback/details/467560/clr-maps-assemblies -进入虚拟地址空间两次

编辑#3 Costura 使程序集加载了两次。项目所有者在同一天修复了该问题 :) http://code.google.com/p/costura/issues/detail?id=17&thanks=17&ts=1328826304

我们需要一个 Costura 标签,但我没有必要的 1500 声望点。如果您有权利,请创建它。谢谢。

亲切的问候,汤姆

0 投票
3 回答
781 浏览

.net - .NET 合并类库引用

我有一个包含 WPF 用户控件的类库。这个库有一些依赖项,但我想将它部署为一个程序集。据我所知,IlMerge 的 WPF 存在一些问题。我尝试了 Costura,但它仅适用于应用程序,不适用于类库(正如我在这里发现的那样)。有什么方法可以实现我的目标吗?

0 投票
1 回答
2264 浏览

.net - 将 app.config 嵌入到程序集中

是否有任何现有的解决方案可以将 app.config 文件嵌入到生成的程序集中?我知道有costura可以将 DLL 嵌入到程序集中(costura 还提供了一个非常好的 VS 插件!)

app.config 的一些同等项目?

0 投票
2 回答
277 浏览

.net - 在使用 ILMerge/Costura 组合程序集后,有什么方法可以让 VS(2010)接受 PDB?

这个问题的相关性超出了我自己的情况,因为任何拥有本地化应用程序并且必须交付独立 EXE 的人都会遇到这个问题——他们会想要使用 ILMerge(或 Costura 或一些自制解决方案)来放置本地化 DLL(或任何其他程序集) ) 到他们的 EXE 中——但是一旦他们这样做了,他们就不能再调试他们的代码了。VS 调试器将拒绝接受为原始 EXE 生成的原始 PDB 文件,可能是因为 ILMerge 步骤更新校验和或更改 GUID。

我想知道是否有任何方法可以解决这个问题.. 可能像一些鲜为人知的 ILMerge 选项?在我看来,这是一种非常常见且不必要的调试能力损失。

我相信在本地化之后调试此类应用程序的唯一其他方法是维护一个使用 DLL un-ILMerged 的​​并行构建选项,这很好,除非您碰巧想要调试本地化代码本身(例如,我)。 .那你真的不走运了。谁能想到其他选择?

我也尝试使用 Costura,但由于本地化 DLL 都包含同名的资源(并且与主资源 AppName.resource 相同),因此您只能将一个这样的 DLL 添加到引用中:不允许后续的 DLL。有什么方法可以让 Costura 工作吗?(如果它可以工作,可能不会出现 PDB 问题,因为该组合是 Visual Studio 构建的一部分......?)

编辑:我正在寻找导致 PDB/EXE 匹配的想法。我意识到您可以在十六进制编辑器中破解 pdb。不过,该问题专门询问了如何使系统按预期工作。

0 投票
1 回答
403 浏览

c# - Fody.Costura 干扰 Caliburn.Micro 视图解析

我有一个通过 Caliburn.Micro 注入视图的窗口;

现在,没有 Fody.Costura,我可以看到我的 ViewModel 是通过 IoC 容器请求的。不久之后(此时可以看到控件),CM 向 IoC 请求 View 类。

现在,当我使用 Fody.Costura 时,首先通过 IoC 请求和解析 ViewModel 类型,这意味着程序集已被解包和加载。但是,CM 从不要求 IoC 解析视图类型,而我的屏幕上只是显示“无法找到...的视图”消息。

所以,问题在于,虽然 View 和 ViewModel 类型可以通过 IoC 解决,但当我使用 Costura 时,Caliburn Micro 甚至选择不尝试获取 View。

我认为 Caliburn.Micro 进行了初步检查以查找类型,但当您使用 Fody.Costura 合并引用的程序集时该检查失败。

知道如何解决吗?

更新:

我将一个 ILog 调试器附加到 Caliburn 并使用 Costura 我收到以下警告:

警告:未找到视图。搜索:Module.Recorder.Views.RecorderView、Module.Recorder.ViewModels.RecorderView。

但是,如前所述,我知道程序集在我加载它以搜索 NInject 模块时已加载,并且我可以看到 Module.Recorder.Views.RecorderView 是注入绑定的。

0 投票
3 回答
10085 浏览

c# - Fody / Costura的问题

首先:我是一个完整的初学者。我在一个解决方案中有两个项目。一个项目是一个控制台应用程序,它是从 Windows 窗体应用程序调用的。现在我想将这些添加到一个可执行文件中。有人告诉我,使用 Fody/Costura 是可能的。我下载了它并将 IncludeAssemblies 代码添加到 xml 文件中。但是,如果我转到调试文件夹,仍然有两个可执行文件分开(除了一些新生成的文件)可执行文件保存在另一个地方还是我做错了什么?

0 投票
0 回答
2454 浏览

c# - 为什么 Fody/Costura 不嵌入我的 Interop dll?

我正在使用 Costura.Fody 将引用的 DLL 作为资源嵌入到我的 EXE 中。它工作正常,只是它没有嵌入 Interop.IWshRuntimeLibrary.dll。

我怎样才能弄清楚为什么?

我正在使用 ILSpy 来检查 EXE,这就是我知道除 IWshRuntimeLibrary 之外的所有引用都作为资源嵌入的方式。再加上用户收到有关 IWshRuntimeLibrary 的异常的事实。

对于 IWshRuntimeLibrary 的引用,“复制本地”为 True。

根据 CorFlags,Interop.IWshRuntimeLibrary.dll 的 ILONLY = 1,我认为这意味着 DLL 是纯托管代码(不是本机或混合模式)。

我正在使用 Fody 1.26.1 版和 Costura.Fody 1.3.2.0 版(最新的 NuGet 包)。

更新

我尝试使用 IncludeAssemblies 选项显式强制嵌入 Interop.IWshRuntimeLibrary,但它没有效果。我还尝试指定一个虚假的不存在的程序集,并且在构建输出中没有错误或提及它。

0 投票
1 回答
335 浏览

fody - Fody 和动态依赖更新(AssemblyResolve 事件)

我正在编写一个自动更新系统,其中 WPF App 动态加载其依赖项(dll)。我正在为此使用 AssemblyResolve 事件。然后我找到了 Costura.Fody,发现它简化了事情。但是,Fody 不允许加载更新版本的依赖项,例如,如果我有 Fody 嵌入的 dll v1.0.0.0,但会从 Web 服务器加载 v2.0.0.0。

Fody 中是否有一个针对 AssemblyResolve 事件的钩子,以便我可以加载我想要的任何依赖项,而不是 Fody 知道或建议的内容?

-pom-

0 投票
6 回答
7933 浏览

c# - Fody:发生未处理的异常

尝试构建项目时突然出现异常。似乎与 Mono.Cecil 有关系。但我没有在我的项目中使用 Mono。

Fehler 13 Fody:发生未处理的异常:异常:Die Datei oder Assembly "Mono.Cecil,Version=0.9.6.0,Culture=neutral,PublicKeyToken=0738eb9f132ed756" oder eine Abhängigkeit davon wurde nicht gefunden。Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein。(Ausnahme von HRESULT: 0x80131040) StackTrace: bei System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType) bei System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters() bei System.Reflection.RuntimeMethodInfo.GetParameters () 北 System.Reflection.RuntimePropertyInfo.GetIndexParametersNoCopy()
bei System.Reflection.RuntimePropertyInfo.GetIndexParameters() bei System.RuntimeType.GetPropertyCandidates(String name, BindingFlags bindingAttr, Type[] types, Boolean allowPrefixLookup) bei System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) bei System.Type.GetProperty(String name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers) bei PropertyDelegateBuilder.BuildPropertySetDelegate[T](Type type, String propertyName) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\PropertyDelegateBuilder.cs:Zeile 9. bei DelegateBuilder.BuildDelegateHolder(Type weaverType) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs:Zeile 25. bei DelegateBuilder.GetDelegateHolderFromCache(Type weaverType) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs . bei InnerWeaver.InitialiseWeavers(List`1 weaverInstances) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 65. bei InnerWeaver.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\ FodyIsolated\InnerWeaver.cs:Zeile 30。来源:mscorlib 目标站点:Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System.RuntimeType)\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs:Zeile 16. bei InnerWeaver.InitialiseWeavers(List`1 weaverInstances) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile . bei InnerWeaver.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 30. 来源:mscorlib TargetSite: Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System .RuntimeType)\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs:Zeile 16. bei InnerWeaver.InitialiseWeavers(List`1 weaverInstances) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile . bei InnerWeaver.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 30. 来源:mscorlib TargetSite: Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System .RuntimeType)无效GetSignature(无效*,Int32,System.RuntimeFieldHandleInternal,System.IRuntimeMethodInfo,System.RuntimeType)无效GetSignature(无效*,Int32,System.RuntimeFieldHandleInternal,System.IRuntimeMethodInfo,System.RuntimeType)

有任何想法吗?我已经尝试重新安装 Costura.Fody 包。