尝试将DTE项目强制转换为VCProject会导致异常,说DLL未注册

时间:2017-10-23 17:18:45

标签: c# visual-studio envdte dllregistration

我正在使用VS 2017编写C#代码,该代码使用DTE API生成带有一组cpp(vcxproj)项目的Visual Studio解决方案。我可以使用vcxproj模板(来自VS 2017样本)创建sln和vcxproj文件。但是当我尝试将EnvDTE.Project转换为VCProject(命名空间Microsoft.VisualStudio.VCProjectEngine)时,我收到一条错误消息,指出VCProject的接口未注册:

{“无法将'System .__ ComObject'类型的COM对象转换为接口类型'Microsoft.VisualStudio.VCProjectEngine.VCProject'。此操作失败,因为QueryInterface调用COM组件上的IID为'{DBF177F2-的接口06DB-4A47-8AAD-C8E12BFD6C86}由于以下错误而失败:未注册接口(HRESULT异常:0x80040155)。“}

我的C#项目引用扩展DLL Microsoft.VisualStudio.ProjectEngine,这是定义VCProject的地方,它编译得很好。 (另一个可用的扩展DLL是Microsoft.VisualStudio.VCProject,但它不包含VCProject本身,引用它对我没有影响。)

我的问题是,这是EnvDTE / VCProject的正常行为吗?如果你的C#程序使用VCProject,程序是否有必要首先以编程方式注册VCProject DLL,以便它可以在任何Windows机器上运行?我发现了有关未注册的DLL异常的其他问题,但答案始终是注册DLL。为什么需要注册引用的程序集?我的代码如下。

$isAdmin = $conn->prepare("SELECT role FROM users WHERE username = :username");
$isAdmin->bindParam(":username", $username);
$isAdmin->execute();
$result = $isAdmin->fetch(PDO::FETCH_ASSOC);
if($result){
 $result = "<script>
 $("header nav").append(
  $("<a />").attr("href", "admin.html").text("Admin panel")
 )
</script>";
}
return $result;

0 个答案:

没有答案
相关问题