我已经使用<TargetFramework>netcoreapp3.1</TargetFramework>
为C#中的SolidWorks创建了一个外接程序。建筑物(具有dotnet build
(生成MyAddin.dll
和MyAddin.comhost.dll
。
为了注册外接程序,我可以运行(具有管理员权限(:
regsvr32 MyAddin.comhost.dll
这使得外接程序可以在SolidWorks中使用。
然而,如果我与同事共享构建输出文件,而他试图以同样的方式注册.dll,则会出现一个消息框,上面写着:
The module "MyAddin.comhost.dll" was loaded but the call to DllRegisterServer failed with error code 0x80040111.
For more information about this problem, search online using the error code as a search term.
当他在自己的机器上构建项目并与我共享时,我也会遇到同样的错误。
我们都使用管理员权限运行regsvr32
。
我的项目的.csproj
文件的主要内容是:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<LangVersion>9.0</LangVersion>
<EnableComHosting>true</EnableComHosting>
<XCadRegDll>false</XCadRegDll>
<UseWindowsForms>true</UseWindowsForms>
<DebugType>portable</DebugType>
<nullable>enable</nullable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<NoWarn>NU1701,CS8002</NoWarn>
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
...
</Project>
同样,如果我们在自己的机器上构建.dll,我们中的任何一个人都可以注册它。只有当我们试图注册由另一方构建的.dll时,我们才会得到错误。重要的是,我们可以在其他机器上注册,因为我们需要能够向我们公司的其他无法自己构建插件的人提供该插件。
当我们使用在另一台机器上构建的文件时,传递给regsvr32
的.dll是否有一些要求没有得到满足?有别的方法吗?谢谢
如果只复制MyAddin.comhost.dll
而不复制MyAddin.dll
,则会出现此错误。这实际上意味着MyAddin.dll
([ComVisible]
类所在的位置(丢失了。