【问题标题】:C# use class from another project - add referenceC# 使用来自另一个项目的类 - 添加引用
【发布时间】:2022-02-21 18:04:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • "如何使用 project2 中的函数但不创建 dll 文件?" - 不幸的是你不能。您必须引用程序集或复制项目 1 中的代码。
  • "如何使用 project2 中的函数但不创建 dll 文件?" 你的意思是要在 project1 中嵌入(或静态链接)project2 dll 吗?
  • 从我看到的问题是相同的解决方案,两个项目。重复stackoverflow.com/questions/53342148/…
  • 如果你只是想避免多个文件,有办法合并程序集,但项目 2 中的编译代码仍然是其中的一部分。这对你有用吗?
  • 我认为这是不可能的。您可以使用公共类创建一个 project3,以便在 project1 和 project2 之间共享

标签: c# visual-studio class reference projects-and-solutions


【解决方案1】:

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

查看@Lavamaster 的答案,了解很棒的 .NET core 3+ 解决方案。


如果可能的话,它会非常复杂。

ILMerge 之类的工具可能是您的一个选择。

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

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


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


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

【讨论】:

    【解决方案2】:

    如果您使用的是 .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 打包到可执行文件中。

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2022-11-20
      • 1970-01-01
      相关资源
      最近更新 更多