Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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# 我可以更改system.dll中的函数吗?_C#_.net_Dll - Fatal编程技术网

C# 我可以更改system.dll中的函数吗?

C# 我可以更改system.dll中的函数吗?,c#,.net,dll,C#,.net,Dll,我想知道是否可以更改system.dll中的函数 喜欢而不是返回0;我将其更改为return-1 然后重新编译并再次使用它 如果是,我们怎么做?不,你不能。您不能这样做,因为您无法对将使用Microsoft签名生成的程序集进行强签名,因此所有引用系统程序集的其他程序集都会抱怨(我知道这一点,因为两周前我尝试执行类似操作:-),但我不想重新编译。对我来说,使用Mono.Cecil直接编辑系统组件的副本就足够了) 如果您正在编写单元测试,则可以使用(需要Visual Studio Premium)。

我想知道是否可以更改system.dll中的函数 喜欢而不是返回0;我将其更改为return-1

然后重新编译并再次使用它


如果是,我们怎么做?

不,你不能。您不能这样做,因为您无法对将使用Microsoft签名生成的程序集进行强签名,因此所有引用系统程序集的其他程序集都会抱怨(我知道这一点,因为两周前我尝试执行类似操作:-),但我不想重新编译。对我来说,使用Mono.Cecil直接编辑系统组件的副本就足够了)

如果您正在编写单元测试,则可以使用(需要Visual Studio Premium)。它允许您将程序集的方法重定向到代码,控制输出和方法的功能


从技术上讲,您可以像仿冒品“库”那样处理这个问题:但请注意,它是复杂的。您可以在C/C++中为exe创建一个“运行程序”。此“运行程序”(从技术上讲,它是CLR主机)可以“动态”重写程序集的.NET代码。

这确实是一件坏事,因为它会破坏依赖该函数返回0的所有其他代码。您能更详细地解释一下为什么需要更改它吗?也许有一个比尝试重新编译核心库更好的方法……您的目标是什么?恶作剧?当然,您认识到,如果您可以这样做,您的System.dll“邪恶化”版本将不会由Microsoft签名,是吗?真的很难想象你为什么需要这个只是检查和测试一些事情我想问的是这是否可能,如果可能的话我们怎么做:)@demonplus,比如做假货而不使用假货。编辑Microsoft程序集,将其副本放入单元测试文件夹,然后运行单元测试。或者可能是因为您想使用一些
内部
类,或者使用一些具有
私有
构造函数的类。有很多,很难/不可能使用它们。有很多原因。。。