【发布时间】:2021-04-16 16:00:44
【问题描述】:
正如标题所说,我想将 PDFSharp 的所有源代码都用到我自己的项目中。但是让我解释一下我为什么会出现这种情况,所以如果我可以做其他事情,也许还有其他选择。
目标:将我的项目编译成单个 .exe 文件以供使用。没有安装程序。 问题:它使用 PDFSharp.dll 导致我出现问题。
我想要做的是使用 ILMerge 创建 .exe。我过去曾成功地将其用于其他项目。
我认为 ILMerge 需要引用 PDFSharp 使用的其他程序集的问题。第一个是 Microsoft.ApplicationInsights。所以为了绕过这个,我通过 Nuget 将 Microsoft.ApplicationInsights 安装到我的项目中。然后从项目中删除了实际引用,但在我的 ILMerge 命令中引用了该库,如下所示:
/lib:"C:\<path to assembly>\Microsoft.ApplicationInsights.2.16.0\lib\net46"
这确实有效。除了,现在它要求另一个库,我得到这个错误:
Unresolved assembly reference not allowed: GdPicture.NET.11.
这看起来像一个付费图书馆,也许下载试用版可以让我通过这个。我还没试过。我换了个档次,因为我觉得我可能会尝试引用无穷无尽的程序集。
然后我尝试获取 PDFSharp 源代码,并在这里找到了 1.32 版: https://sourceforge.net/projects/pdfsharp/files/pdfsharp/PDFsharp%201.32/
我在我的解决方案文件中添加了对这个项目的引用,所以现在我有一个包含 2 个项目的解决方案。太好了。
然后我尝试将源文件链接到我的项目中。如何做到这一点在这里: https://jeremybytes.blogspot.com/2019/07/linking-files-in-visual-studio.html#:~:text=To%20link%20files%2C%20use%20the,CLICK%20THE%20%22Add%22%20BUTTON。 这似乎可行,但是我添加的每个文件都需要另一个文件,该文件引用另一个文件等。它似乎无穷无尽。所以这让我想到了将整个源代码消耗到我的项目中,我还没有看到一个好的方法来做到这一点。我无法添加对项目的引用,因为它只是引用了已编译的 dll,而 iLMerge 无法合并。
我还尝试将 PDFSharp 的 .csproj 文件中的标签更新为“模块”以创建一个 .netmodule 文件。这会在 obj 目录中创建文件,但会引发错误:
\PDFsharp\code\PdfSharp\obj\Release\PdfSharp.netmodule' is not an assembly
感谢任何帮助。谢谢。
更新:我颠倒了所有内容并添加了 PdfSharp 参考 - 回到我所在的位置并将我的项目更改为模块并构建它创建了一个 .netmodule 文件。然后使用程序集链接器从该文件创建一个 .exe。在 VS Dev 提示符下使用此命令有效。
al MyModule.netmodule /target:exe /out:MyProgram.exe /main:MyNamespace.MyClass.Main
这创建了 .exe,但在没有任何其他支持文件的情况下运行时会产生文件未找到错误:
System.IO.FileNotFoundException: Could not load file or assembly 'MyModule.netmodule' or one of its dependencies. The system cannot find the file specified.
模块应该在 exe 中,这很有趣吗?
【问题讨论】:
-
将项目文件更改为模块绝对行不通。是的,您需要添加的文件可能几乎是无穷无尽的。您最好的选择可能是在文本编辑器中编辑 csproj 文件并将所有“
-
我会试试 Russ - 谢谢。
-
@Russ - 我能够将所有源文件添加到我的项目中。它构建,它运行。 PDF 功能有效。但是,当我使用 iLMerge 时,它仍然抱怨缺少引用:不允许未解析的程序集引用:Microsoft.ApplicationInsights。这在我可以找到的源文件中的任何地方都没有引用...
-
由于您试图获得没有 DLL 的单个可执行文件,您可以获取 Microsoft.ApplicationInsights 的源代码,或者在 iLMerge 中找到使用 Microsoft.ApplicationInsights 的代码并查看如果您可以将其重新编码为替代方案 - 或者重新编码以使其不使用 Microsoft.ApplicationInsights。
-
呃!一直以来,问题来自不同的 dll,我以为是 PDFSharp 而不是!好浪费一整天:(