gpt4 book ai didi

c# - ILMerge:如何合并Azure运行时库?

转载 作者:行者123 更新时间:2023-12-03 03:18:39 25 4
gpt4 key购买 nike

我正在尝试使用 ILMerge 创建一个使用 Windows Azure SDK 2.0 的单个可执行文件,包括 Microsoft.WindowsAzure.ServiceRuntime.dll,这是我手动添加的,因为我找不到任何包含它的 NuGET 包。

我在 VS2012 构建后事件中使用以下命令行:

/wildcards /targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /log:ILMerge.log /closed Output.exe *.dll /out:Executable.exe

但是,即使输出窗口在构建后完全没有报告任何问题,我也会在 ILMerge.log 中收到以下错误:

The assembly 'Microsoft.WindowsAzure.ServiceRuntime' was not merged in correctly. It is still listed as an external reference in the target assembly.
An exception occurred during merging:
ILMerge.Merge: The assembly 'Microsoft.WindowsAzure.ServiceRuntime' was not merged in correctly. It is still listed as an external reference in the target assembly.
at ILMerging.ILMerge.Merge()
at ILMerging.ILMerge.Main(String[] args)

然后可执行文件在打开时抛出以下异常:

System.Reflection.TargetInvocationException: Exception has been thrown by the 
target of an invocation. ---> System.IO.FileNotFoundException: Could not load file
or assembly 'msshrtmi, Version=2.0.0.0, Culture=neutral, publicKeyToken=31bf3856ad364e35'
or one of its dependencies.

我还测试了相同的输出而不合并,它工作正常。

我在这里缺少什么?

最佳答案

这似乎无法完成,或者至少不是我想要的方式。

Microsoft.WindowsAzure.ServiceRuntime.dll seems to have a dependency在 native 库 msshrtmi.dll 上。这意味着 ILMerge 无法处理它,因为非托管代码无法与托管代码合并。

根据these two有一种方法可以解决此问题,但它涉及将 msshrtmi.dll 打包为资源并在需要时将其解包。我觉得这有点hacky。

所以我想我只需要做我之前应该做的事情:从构建合并的非 Azure 版本的项目中删除对 Microsoft.WindowsAzure.ServiceRuntime.dll 的所有引用我的 WCF 服务。这可能涉及使用一些 IoC 容器并进行一些大量的重构,这就是我在这个阶段试图避免它的原因。

关于c# - ILMerge:如何合并Azure运行时库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com