0

我有一个项目ProjectA,我在其中保留实用程序类。我想在多个解决方案中使用这个项目,这样我就不必在每次更改Project.

但似乎有一个问题:如果我在 中引用ProjectA,除非旁边有已编译的ProjectB应用ProjectB程序,否则无法运行已编译的应用程序。ProjectA因此,如果输出的ProjectB是 ProjectB.exe,如果 ProjectA.exe 不在其旁边,则 ProjectB.exe 在执行时会出错。这是为什么?我只想使用ProjectAin 中的命名空间ProjectB,不需要ProjectA依赖ProjectB.

谁能告诉我如何在不需要输出的情况下引用ProjectAin来运行输出?ProjectBProjectAProjectB

4

5 回答 5

1

命名空间不限于一个程序集 - 如果您愿意,您可以在多个程序集中使用相同的命名空间,并且一个程序集可以包含任意数量的命名空间。

如果您从另一个程序集引用一个类/类型,那么当您运行原始程序集时,该程序集必须存在(或可定位)。如果您所做的只是编码,那么解决方案中的简单项目参考就可以解决问题。如果您没有源代码,Project A那么您将需要它的编译形式——没有它,CLR 无法检查它并知道它包含什么。

于 2012-09-11T09:09:25.583 回答
1

您可能需要一个共享的 dll。

您已经在项目 A 中创建了实用程序类,因为它们在项目 A(应用程序 A?)中共享,现在您已经引入了项目 B(应用程序 B),并且正如您所说,它需要从 projectA.dll/ 中获取代码可执行程序。

因此,在您的解决方案中创建一个新项目(可能是 Ab.Shared.dll :-))并将您的实用程序类移入其中。您现在可以从项目 A 和项目 B 中引用该 dll。

更新:刚刚阅读您关于吸出代码的评论。

共享 dll 是最常见的代码共享方式,但还有其他方式。从理论上讲,您可以简单地在两个项目中“包含”相同的 *.cs 文件并以这种方式共享它们(使用“添加现有项目”对话框中的下拉菜单并选择“添加为链接”)。但是在实践中,维护这种情况变得更加尴尬,因此大多数人使用共享 dll。

于 2012-09-11T09:18:06.827 回答
0

在这种情况下,将ProjectA编译后的 dll 添加到您的 bin 文件夹中,并从您的其他项目中添加对该 dll 的引用。不要添加对您的ProjectA项目的引用。

当您使用 Visual Studio 添加对项目的引用时,添加引用 -> 项目,然后它需要编译项目并将 dll/exe 复制到另一个项目 bin 文件夹。

于 2012-09-11T09:03:58.960 回答
0

在文本编辑器中打开您的csproj文件并插入 xml:

<Reference Include="AssemblyName.dll">
  <HintPath>$(EnvironmentVariable)\bin\AssemblyName.dll</HintPath>
  <Private>False</Private>
</Reference>
于 2012-09-11T09:07:39.077 回答
0

如果我理解正确,您在 ProjectA.exe 中有要在 ProjectB.exe 中使用的代码,但在运行时,您希望运行 ProjectB.exe 而无需用户拥有 ProjectA.exe 的副本。

这是不可能的。当您使用来自另一个程序集的类型时,该程序集会在运行时加载。类型不会从 ProjectA 复制到 ProjectB。

在我看来,您应该将公共实用程序类提取到 ProjectUtility.dll 中,然后从您的 ProjectA.exe 和 ProjectB.exe 应用程序中引用它。

编辑: ILMERGE 可能是要走的路。有关详细信息,请参阅C# 中的静态链接

于 2012-09-11T09:12:09.877 回答