我有一個簡單的 IHttpModule
namespace System.Web.Extensions.Resource
{
public class MyHttpModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreSendRequestContent = PreSend_RequestContent;
}
private void PreSend_RequestContent(object sender, EventArgs e)
{
HttpResponse response = ((HttpApplication)sender).Response;
response.AddHeader("MyHttpModule", "Running");
}
}
}
我用powershell將它安裝到GAC(完全沒有錯誤):
$name = "c:\MyHttpModule.dll";
[System.Reflection.Assembly]::Load('System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a');
$publish = New-Object System.EnterpriseServices.Internal.Publish;
$publish.GacInstall($name);
$type = 'System.Web.Extensions.Resource.MyHttpModule,' [System.Reflection.AssemblyName]::GetAssemblyName($name).FullName;
C:\Windows\System32\inetsrv\Appcmd.exe add module /name:MyHttpModule /type:"$type"
但是當我訪問 IIS 站點時,我得到了
例外詳細資訊:System.IO.FileNotFoundException:無法加載檔案或程式集“MyHttpModule,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依賴項之一。該系統找不到指定的檔案。
所以Windows不再支持安裝到GAC快取?
編輯
我添加了一個強名稱并確認程式集已安裝到 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyHttpModule\v4.0_1.0.0.0__4959579d21f18138。

現在 IIS 有一個不同的錯誤
System.TypeLoadException: Could not load type 'System.Web.Extensions.Resource.MyHttpModule' from assembly 'MyHttpModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4959579d21f18138'.
但是從 ILSpy 我可以看到這種型別是可用的,那么有什么問題呢?

再次編輯
它突然起作用了,我看到了模塊添加的標題。不知道為什么,但現在關閉它。
uj5u.com熱心網友回復:
PublicKeyToken 為空,這意味著 DLL 未使用強名稱進行簽名。需要對Dll進行簽名,然后放到GAC中,請參考這里的MSDN文章,該文章還告訴你如何在VS中簽名:
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/386287.html
標籤:C# asp.net-mvc 信息系统
