是否可以在C#中的项目之间静态共享代码?

在C#中,是否有可能在Visual Studio项目之间共享代码无需分发DLL?

我正在维护一些由几个Visual Studio C#项目组成的软件,每个项目都构建一个简单的控制台可执行文件。 我想搬出的项目之间有很多共享代码。 我相信我可以将代码放在类库项目中,但我宁愿避免使用DLL来分发每个可执行文件。

有没有办法解决? 我是C#的新手,所以也许我认为这一切都错了 – 有没有其他的建议?

您可以使用ILMerge将类库与exe结合起来。

http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

好吧,我个人的偏好是咬紧牙关并分发DLL。 这是最干净,最惯用的选择。

其他选择:

  • 如果我没记错的话,您可以在项目目录外的现有源文件中添加“链接”,但这有点奇怪。
  • 您可以使用ilmerge将类库合并为可执行文件作为构建后步骤

您可以在Visual Studio中将代码添加为链接文件 – 右键单击​​项目,选择“添加/现有项目”,然后在“添加”按钮上单击下拉箭头并选择“添加为链接”。

这会在项目中创建添加文件的快捷方式,而不是复制它,这意味着您只维护一个源文件,但仍然可以在需要的地方编译它。

我认为一个类库会更整洁,但如果你想避免这样,那么快捷方式就是一个简单的选择。

一种选择是使用ilmerge 。

ilmerge /target:winexe /out:SelfContainedProgram.exe Program.exe ClassLibrary1.dll ClassLibrary2.dll 

正常编译应用程序和类库,然后将类库与程序合并。 你甚至可以只为你做一个post build步骤 。

我不确定你的理想情况是什么? 如果您不想分发任何其他文件,则代码必须驻留在您的exe中。 你可以从另一个引用一个exe,但是如果exe A引用exe B,那意味着你不能分发A而不分发B.

可以在项目之间共享代码。 只需创建一个VS.NET解决方案。 将每个项目添加到解决方案中。 应用适当的项目参考。 您的单个VS.NET解决方案可以拥有构建到控制台应用程序的n个项目。 到目前为止,这是在项目之间共享代码的最简单方法。

除了发布的所有其他优秀方法之外,您还可以将DLL打包为EXE的嵌入式资源,并使用Assembly.Load(byte[])在运行时将程序集加载到内存中。

您可能希望在可执行文件的程序集中嵌入或合并类库程序集。 这已在前面讨论过。 试试这里:将组件嵌入另一个组件中

将文件添加到项目时,添加按钮上有一个下拉列表,可将其添加为链接内容。

然后原始位置的更改将反映在链接的位置中。