Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除C#中未使用的方法?_C#_.net_Dll - Fatal编程技术网

如何删除C#中未使用的方法?

如何删除C#中未使用的方法?,c#,.net,dll,C#,.net,Dll,例如,我有两个项目共享一些函数,假设它们是A和B。因此我创建了另一个库项目C,其中包含公共代码。 我将公共代码放在一个类中,但是在这个类中,并不是所有的方法都在两个项目中使用。 其中一些仅用于A,一些仅用于B,其余均用于两者 现在,在编译之后,我得到了A.exe、B.exe和C.dll。我想要的是: 我不想要dll,只想要A.exe和B.exe 我不希望只在A.exe中使用的方法出现在B.exe中,反之亦然 合并dll和exe可以解决问题1,但问题2如何?您所描述的是一个静态库,而不是dll 如

例如,我有两个项目共享一些函数,假设它们是A和B。因此我创建了另一个库项目C,其中包含公共代码。 我将公共代码放在一个类中,但是在这个类中,并不是所有的方法都在两个项目中使用。 其中一些仅用于A,一些仅用于B,其余均用于两者

现在,在编译之后,我得到了A.exe、B.exe和C.dll。我想要的是:

  • 我不想要dll,只想要A.exe和B.exe

  • 我不希望只在A.exe中使用的方法出现在B.exe中,反之亦然


  • 合并dll和exe可以解决问题1,但问题2如何?

    您所描述的是一个静态库,而不是dll

    如果C是一个静态库,那么在编译a时(将编译器设置为删除未使用的内容),a的exe将从静态库C中获取a所需的所有代码,并直接放入exe中。B也是如此

    但DLL不是这样工作的

    有了DLL,a可以从C获得某些代码的“服务”,但由于代码存在于C中,a无法控制C中的代码


    正如@RobertMoskal所指出的,有一些工具可以满足您的需求。我只是想澄清一下,您的意图与DLL的设计背道而驰,尽管它可以通过其他地方提到的工具来实现。

    每个项目都将创建自己的输出。(dll、exe等)所以去掉c的dll似乎不太可能。对于a和b,如果你不想公开方法,那么就将它们私有化或保护。我认为这不是一个好主意,但是你可以将使用内部类的a方法放在项目a中,将b方法放在项目b中,将常用方法放在项目a中,然后在项目b中添加项目a引用。顺便说一句,值得注意的是.NET在设计上没有静态库。请看下面的讨论:我已经想到了另一个选择。我可以将C中的源文件作为链接添加到A和B中,然后我可以使用A和B中的类和方法,而无需创建dll。现在的问题是编译是否可以删除生成的exe中未使用的方法?我认为我的情况不同,因为我有库的源代码。使用此解决方案,即链接,当您将编译器设置为优化(即发布配置)时,它可能会丢弃未使用的代码。你得测试一下。