我有一个C#项目,它构建成一个DLL,有两个类,ClassA和ClassB.出于项目管理的原因,我想将ClassB移动到一个单独的DLL中,只保留原始DLL与ClassA.
问题是我有其他DLL(也是从C#编译)在其原始DLL中引用ClassA和ClassB.ClassA很好但是调用ClassB最终会产生TypeLoadException.
(我可以使用他们的新项目引用重新编译所有其他DLL,但出于项目管理的原因,我宁愿不这样做.)
有没有办法我可以部署我的新拆分DLL并让其他DLL继续工作?或者,我是否真的需要咬住众所周知的子弹并计划部署所有这些文件的新版本?
我有一个带有Dispose函数的C#类IDisposable.它旨在用于using块内,因此它可以立即释放它所处理的昂贵资源.
问题是在Dispose调用之前抛出异常时发生了一个错误,并且程序员忽略了使用using或finally.
在C++中,我从来不必担心这一点.对类的析构函数的调用将自动插入到对象范围的末尾.避免这种情况发生的唯一方法是使用new运算符并将对象保持在指针后面,但这对于程序员来说需要额外的工作并不是他们偶然会做的事情,比如忘记使用using.
是否有任何方法using可以在C#中自动使用块?
非常感谢.
更新:
我想解释为什么我不接受终结者答案.这些答案本身在技术上是正确的,但它们不是C++风格的析构函数.
这是我发现的错误,简化为必需品......
try
{
PleaseDisposeMe a = new PleaseDisposeMe();
throw new Exception();
a.Dispose();
}
catch (Exception ex)
{
Log(ex);
}
// This next call will throw a time-out exception unless the GC
// runs a.Dispose in time.
PleaseDisposeMe b = new PleaseDisposeMe();
Run Code Online (Sandbox Code Playgroud)
使用FXCop是一个很好的建议,但如果这是我唯一的答案,我的问题必须成为C#人的请求,或使用C++.二十个嵌套使用语句的人吗?
C#的List <>有一组CopyTo函数,它们使用快速内存块拷贝将其内部数组的内容提取到另一个数组中.
有没有办法反过来做到这一点?它可能看起来像......
var buffer = new List<byte>();
buffer.AddRange(afewbytes);
buffer.AddFromArray(myArray, startIndex, countBytesToCopy);
buffer.AddRange(afewmorebytes);
Run Code Online (Sandbox Code Playgroud)
由于我的List是List <byte>变种,我宁愿避免一个逐字节复制的循环.
这个问题询问是否有办法找到代码是否已经为事件添加了自己的事件处理程序.但是,给出的答案只能在拥有该事件的同一个类中进行.(Delegate.GetInvocationList等.)
我想为AppDomain.CurrentDomain.AssemblyResolve添加自定义事件处理程序.有没有办法在再次添加之前找出我的自定义处理程序是否已添加?(对于此标准库事件和其他标准库事件.)
如果答案确实是"那是不可能的".那么请把它作为答案.
c# ×4
.net ×3
arrays ×1
dispose ×1
dll ×1
events ×1
idisposable ×1
late-binding ×1
memory ×1
performance ×1
runtime ×1
using ×1