。 有沒有辦法強制ASP.NET釋放文件的鎖定? 的DllImport和我有,因爲當我使用進口的方法ASP.NET加載DLL並鎖定即使它使用完的文件中的一些問題的DllImport和ASP.NET ASP.NET
3
A
回答
2
強制DLL出在.net的過程中的唯一方法是卸載,其中DLL被加載在AppDomain。除非你創建一個單獨的AppDomain來運行DllImport代碼,否則這是不可能的。
另外我知道這個政策適用於託管的DLL。我不是100%確定這是否適用於通過PINvoke加載的DLL,但我相當肯定。
2
只有當你創建一個新的AppDomain和DLL加載到域。之後,您可以卸載AppDomain並卸載dll。
0
卸載應用程序域並不是唯一的答案。您也可以通過pinvoke使用 LoadLibrary
和 FreeLibrary
來卸載庫。只要確保你打電話 FreeLibrary
兩次,以確保你的庫的任何依賴關係也被卸載。
我沒有測試過這一點,但我想這樣一類將使這樣做更容易:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibrary(string libname);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern bool FreeLibrary(IntPtr hModule);
class LibraryHandle
{
readonly string libName;
int refCount = 0;
IntPtr handle;
public LibraryHandle(string name)
{
libName = name;
}
public void Increment()
{
if (refCount == 0)
{
handle = LoadLibrary(libName);
if (Handle == IntPtr.Zero)
{
int error = Marshal.GetLastWin32Error();
throw new Exception(string.Format("{0})", error));
}
}
++refCount;
}
public void Decrement()
{
if (refCount <= 0)
return;
if (--refCount)
{
// It might be better in some cases to:
// while(FreeLibrary(handle));
FreeLibrary(handle);
FreeLibrary(handle);
}
}
}
一定要小心,這個例子 不是線程安全 ,你會想保證在ASP.NET中,並且不會執行完整的錯誤檢查。
而且,因爲這可能會違反運行時做一些假設,你沒有加載可能不是一個好主意庫使用 FreeLibrary
。
另一種方法是在新 AppDomain
執行任何操作,然後卸載它,當你完成。
相關問題
- 1. Asp.Net C#DllImport問題
- 2. 調用C++的Dll使用的DllImport
- 3. dllimport無法加載DLL
- 4. System.EntryPointNotFoundException和的DllImport( 「KERNEL32.DLL」)
- 5. 當我使用DLLImport時,我應該在哪裏放置dll文件?
- 6. 緩存的問題使用JavaScript和asp.net
- 7. PARAMATERS進口使用DllImport屬性
- 8. C#dllimport的問題
- 9. DLLImport未能加載DLL
- 10. 使用dllimport的過程
- 11. 使用ASP.NET中的文件和URL
- 12. ASP.Net MVC DllImport BadImageFormatException 32bit/64bit
- 13. 使用AddAt方法添加控件的問題[ASP.NET]
- 14. 如何註冊和使用ASP.NET 1.1中的DLL文件
- 15. 如何使用XDocument.Load()方法加載Xml文件並鎖定它?
- 16. IIS和ASP.NET正在鎖定我的PInvoke dll
- 17. 方法在homecontroller加載和asp.net中的路由問題mvc
- 18. 使用ASP.NET暫時鎖定文件夾
- 19. 使用ASP.net的ASP.NET,MySQL和sql查詢
- 20. ASP.NET Web應用程序的哪些dll文件會加載IIS?
- 21. LogonUser使用String Marshaling的DLLImport有什麼問題? [C#]
- 22. ASP.NET中使用VB.NET的GridView的問題
- 23. 正確使用DllImport
- 24. 有沒有使用ASP.NET加載網頁的方法?
- 25. 我們可以使用ASP.NET MVC3和經典的ASP.NET嗎?
- 26. 問題加載XML文件asp.net的MVC
- 27. 如何在C#中使用DllImport接口?
- 28. c#:如何知道在DllImport中使用的DLL的完整路徑?
- 29. 我的ISP不支持ASP.NET MVC。我仍然可以使用它的一些嗎?
- 30. 問題使SessionState的ASP.NET中
對我來說,它並沒有與pinvoke添加DLL工作。可能依賴於dll。 – Sire 2012-09-10 08:37:42