我有一个Winforms项目A,它引用类库程序集B。程序集B的文件夹包含设置为Build Action = None和Copy to Output Directory = True的文件。这些文件夹和文件被正确地输出到程序集B的bin文件夹。它们不是引用的文件,只是我需要在运行时从部署的位置加载的文件。
当运行项目A时,程序集B中的代码需要访问所描述的文件夹和文件。AppDomain.CurrentDomain.BaseDirectory将给出项目A的运行位置,但文件夹和文件在该位置不存在。如何从程序集B中在C#代码中找到这些文件?
程序集B被编译成各种解决方案类型(winforms、web服务等),所以我需要一个可以在所有场景中工作的部署。
我希望这是有意义的!我想我要找的是:( a)改变部署方式,使文件夹和文件也在运行目录中;或者( b)更改程序集B中的代码。
如有任何帮助,我将不胜感激!
发布于 2013-04-24 03:36:38
如果程序集B要在应用程序之外提供和使用,我建议将文件夹嵌入资源,而不是磁盘上的外部文件夹。当然,这需要在应用程序中使用这些文件时进行代码更改,以便从ResourceStreams而不是磁盘上的文件中获取它们。
如果文件夹只是应用程序运行时需要访问的数据,那么最简单的解决方案是将两个项目构建到一个公共输出目录中。设置输出目录。
bin\Debug
至
..\bin\Debug
这样,A和B的输出(包括文件夹)将位于同一个目录中(如果项目与正常情况一样位于解决方案目录下的文件夹中)。这也可以帮助加快您的构建。
发布于 2013-04-24 04:25:32
您可以通过项目属性添加构建后事件。在这种情况下,可以运行命令将程序集和文件夹及其内容复制到适当的位置。
在代码中,如果需要加载程序集的位置,则可以使用Assembly.GetExecutingAssembly().CodeBase
https://stackoverflow.com/questions/16190766
复制