我有一个库项目,其中包含一些内容文件(例如,XML和架构文件,图像文件等),所有这些内容都将Build Action设置为Content(始终复制)。
此库项目位于Visual Studio解决方案中,该解决方案还具有引用该库的测试应用程序(WPF)。
构建解决方案时,依赖库项目中的所有内容文件都会复制到我的测试应用程序的bin文件夹中。 (它们也会被复制到库项目的bin文件夹中。)
今天,我将我的库项目生成的程序集dll给了另一个程序员供他参考。然而,我甚至没有想到这还不够。我也需要给他内容文件。所以我做了,他把它们添加到他的项目中。
此解决方案有效,但我对此感到不舒服。我不喜欢内容文件与他的项目文件混在一起。这使得它们更有可能被意外更改或删除。
所以,我希望在涉及内容文件时,我可以就如何与其他程序员共享库提出一些建议。
注意:并不是我试图隐藏内容文件(引用此库的程序员访问它们实际上很重要),但我希望它们与引用项目保持独立,但仍然可以正确复制到编译项目时的bin文件夹。我想我所说的是,我希望它就像他们的解决方案中有库项目一样,而不是代码文件和xaml文件。
感谢。
修改
我想到的一个想法是,我可以将我的库项目中的文件夹结构和内容文件复制到新的类库项目中。然后,任何引用我的库项目的人都可以在他们的解决方案中添加这个最小的类库。他们仍然必须将dll作为一个单独的步骤引用,但这肯定比当前的解决方案更好。也许我甚至可以编写一个后期构建事件,它会自动将我的库项目中的所有内容文件复制到最小类库中。 (现在,我只需要研究如何实际编写构建事件:))。欢迎评论。
编辑2:
我在原始编辑的基础上提出了一个解决方案,我想我会很满意。请参阅下面的答案。
答案 0 :(得分:2)
使内容文件嵌入资源。然后,您可以使用Assembly.GetManifestResourceStream()
与他们联系。它使您的程序集更具可移植性 - 您不再需要在执行时依赖文件系统位置。
答案 1 :(得分:0)
我决定从库项目中删除内容文件,并将它们放在一个仅包含内容的“仅内容”库项目中。如果有人需要使用库项目,我只需共享dll和仅限内容的库项目文件夹。这样,解决方案文件夹中的项目和内容文件之间的关系保持完全相同,并且在编译时所有内容都会自动更新。