我有一个C#4.0应用程序,该应用程序从C++应用程序引用类型库。这用于一些安全的COM互操作,我最初曾问过here。
在我的开发机器上,安装了第二个应用程序,因此我可以毫无问题地进行编译。如果我尝试在我们的自动生成服务器或任何安装了Visual Studio但没有第二个程序的计算机上进行编译,则会收到以下错误,并且编译失败:
Google文字:
找不到类型或 namespace 名称(您是否缺少using指令或程序集引用?)
无法获取类型库“guid ....” 1.0版的文件路径。图书馆未注册。 (来自HRESULT的异常:0x8002801D(TYPE_E_LIBNOTapped))
找不到引用的组件“SecurityAgentLib”
图片的可读性:
除了安装用于注册实现这些类型的实际dll的应用程序外,我不确定如何解决此问题,但是我不想在构建服务器上执行此操作。使用这些类型的代码包装在一个不会实例化的类中,除非运行先决条件检查以确认该应用程序已实际安装,所以不会出现运行时错误。实际上,我可以在没有安装第二个应用程序的机器上很好地运行我的应用程序-我只是不能在那里编译它。
在Visual Studio中,引用指向解决方案目录中包含的.tlb文件,因此存在tlb文件本身。
我无法想象它应该以这种方式工作,我已经四处搜寻,但显然我没有在寻找正确的术语。
编辑:
我认为至少运行tlbimp.exe会生成一个dll,但类型库应足以进行编译。还有一个引用损坏的问题。我正在阅读本文Troubleshooting Broken References,它说,如果引用的是未安装的COM组件,则比安装该组件更正了该错误,这是正确的。
在构建服务器上安装它确实不是一种选择。如果路径断开,则打开Visual Studio并重新添加引用也不起作用。
我能够使用tlbimp创建一个dll,并使用visual studio添加对该dll的引用。这让我可以进行编译,但是在无人看管的构建服务器中如何工作?
编辑
好吧,我提出了两个可行的解决方案,因为我的要求都是无人值守
最佳答案
这有两个可行的选择。
https://stackoverflow.com/questions/8517254/
相关文章:
ios - Amazon IOS SDK : compiler warnings - ARC iss
c++ - C++/LabVIEW互操作: error extracting data from L
android - Android Intent使用情况(Call_action和new_task_
c++ - `invalid initialization of non-const referen
.net - 错误: “Expression must have class type” C++/C
java - 保存一个整数onClick,以便以后可以在android应用中调用它
java - 即使定义了类和参数,Java也找不到符号错误?