1

我在 C# 中的解决方案有问题。

在解决方案中,我有 2 个项目,Project1 和 Project2。我有一个问题,因为在 Project1 中我使用 Project2 中的函数,所以我需要从 Project2 中引用这些函数。

构建解决方案后,我在 bin/debug 文件夹中看到 Project2 的 dll 文件。

如何在不创建 dll 文件的情况下使用 Project2 中的函数?

我试图右键单击 Project1 中的特定引用并转到属性并将“复制本地”更改为“false”,并且 dll 没有显示在文件夹中,但是当我运行代码时,我得到了一个程序集错误。我该如何解决这个问题?

4

3 回答 3

3

如果我正确理解您的问题,您希望将库包含、嵌入或静态链接project2 到您的project1程序集中。

请参阅@Lavamaster 的答案,了解很棒的 .NET core 3+ 解决方案。


如果可能的话,这将是痛苦的复杂。

ILMerge这样的工具可能是您的选择。

ILMerge 是将多个 .NET 程序集合并为一个程序集的实用程序。它可以免费使用,并以 NuGet 包的形式提供。

而且我也相信一些混淆器能够将程序集合并到一个 exe 中。


另一种选择是将程序集作为资源嵌入并在运行时加载它,但是,您将需要某种共享接口定义,最有可能在共享 dll 中。


所以,除非真的需要;我建议重新考虑要求。

于 2020-06-23T21:00:38.770 回答
1

如果您使用的是 .NET Core 3.0 或更高版本,您可以构建项目而不包含任何 DLL 和其他东西,只将应用程序可执行文件作为输出(这意味着您不会看到您的项目 DLL、任何 Nuget 包 DLL 等,只有可执行文件)。

您所要做的就是打开 CMD,cd 到 .csproj 文件所在的项目目录,然后运行以下命令: dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true 如果您需要发布 x86,我认为您必须更改win-x64为任何一个win-x86或类似的东西。

编辑:我应该补充一点,这将增加文件大小,因为它将 .NET Core 打包到可执行文件中。

于 2020-06-23T21:35:04.730 回答
0

如果没有 DLL 文件,您将无法做到这一点。DLL 是项目 2 的编译代码。您需要将其作为项目 1 的依赖项,因此项目 2 DLL 将在那里。您可以创建一个包含任何共享代码的项目 3,但是您的项目 1 和项目 2 的 bin/debug 文件夹中都会有一个项目 3 的 DLL。

于 2020-06-23T21:04:25.710 回答