[英].NET6: registering COM DLL with regsvr32 results in 80040111
在 Steve Syfuh 的博客文章和repo之后,我正在玩 Win10/11 的 CredentialProviders。 按原樣使用 repo(.net framework 4.6.1)效果很好,但我想在 .net6 中進行。
我已閱讀有關 .net 內核的 COM 的文檔並嘗試遵循,但無論我做什么,我都會收到以下錯誤:
模塊 [myproject].comhost.dll 已加載,但對 DllRegisterServer 的調用失敗,錯誤代碼為 0x80040111。
我的步驟是:
[ComVisible(true)]
和唯一的 GUID 放入應該可以訪問的公共類(即CredentialProvider
、 CredentialView
、 CredentialProviderCredential
).csproj
文件並添加<EnableComHosting>True</EnableComHosting>
midl
工具以獲取credentialprovider.tlb
並將其添加到.csproj
文件中:<ItemGroup>
<ComHostTypeLibrary Include="..\interop\credentialprovider.tlb" Id="1" />
</ItemGroup>
cmd
以運行regsvr32 [myproject].comhost.dll
並得到上述錯誤我發現這個問題的內容相似(但我無法在我的機器上運行它,並且 [myproject].dll 就在 comhost 旁邊),我在 Hans Passant 的鏈接中嘗試了建議,但都是徒勞的。
請問有人對可能是什么問題有任何建議嗎?
我想我仍然可以在 .net 框架 4.8 中做到這一點(再次有效),但我想稍微干預一下,我想堅持使用最新版本的 .net(還有一些我想要的包喜歡使用不再支持框架)。
好的,所以在不時檢查之后,我想通了。 我唯一的問題是我將原來的CredProvider.Net.Interop2.dll
重命名為Interop2.dll
。 一旦我將 DLL 重命名回原來的名稱,它又開始像魅力一樣工作了。
不過很奇怪,因為在項目文件中我無論如何都指出了正確的路徑:
<ItemGroup>
<Reference Include="CredProvider.NET.Interop2">
<HintPath>..\midl\Interop2.dll</HintPath>
</Reference>
</ItemGroup>
但我會把它留給比我更聰明的人。 (對於我的項目,無論如何我都會重新創建 DLL 以及一個合適的名稱。)
最后,我分享一下結果,以防其他人想在當前 C# 版本中使用憑據提供程序: CredentialProvider.Net6 。 我還糾正了所有讓我煩惱的 VS 警告。 雖然從原始存儲庫繼承了一些錯誤,但我會保留它們 - 查找和糾正它們相對容易,並創建一個很好的練習來真正理解憑證提供者:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.