0

我有一个 Winforms 项目 A,它引用了一个类库程序集 B。程序集 B 的文件夹包含设置为Build Action = NoneCopy to Output Directory = True的文件。这些文件夹和文件正确输出到程序集 B 的 bin 文件夹。它们不是引用文件,只是我需要在运行时从部署位置加载的文件。

运行项目 A 时,程序集 B 中的代码需要访问所描述的文件夹和文件。 AppDomain.CurrentDomain.BaseDirectory将为我提供项目 A 的运行位置,但该位置不存在文件夹和文件。如何在程序集 B 的 C# 代码中找到这些文件?

程序集 B 被编译成各种解决方案类型(winforms、Web 服务等),所以我需要一个可以在所有场景中工作的部署。

我希望这是有道理的!我想我正在寻找 a) 对其部署方式的更改,以便文件夹和文件也在运行目录中,或者 b) 对程序集 B 中的代码进行更改。

如果有任何帮助,我将不胜感激!

4

2 回答 2

2

如果要在应用程序之外运送和使用程序集 B,我建议使文件夹嵌入资源而不是磁盘上的外部文件夹。这当然需要在应用程序中使用这些文件的任何地方更改代码,以便从 ResourceStreams 而不是磁盘上的文件中获取它们。

如果文件夹只是应用程序运行时需要访问的数据,那么最简单的解决方案是将两个项目构建到一个公共输出目录。设置输出目录,例如

   bin\Debug

   ..\bin\Debug

这样,A 和 B 的输出(包括文件夹)都将位于同一目录中(如果项目正常位于解决方案目录下的文件夹中)。这也有助于加快构建速度。

于 2013-04-24T11:36:38.690 回答
1

您可以通过项目属性添加构建后事件。在这种情况下,您可以运行命令将程序集和文件夹及其内容复制到适当的位置。

在您的代码中,如果您需要加载程序集的位置,那么您可以使用 Assembly.GetExecutingAssembly().CodeBase

于 2013-04-24T12:25:32.393 回答