tfs 生成错误 无法注册程序集"MyAssembly.dll" - 访问被拒绝
tfs build error Cannot register assembly "MyAssembly.dll" - access denied
我有一个C#web服务项目。我创建了一个客户端,用于创建和管理与服务的连接。我们有一个用C++编写的旧版PC产品,他们需要有一个接口来调用该服务。我在客户端上为它们创建了一些调用,并使COM可见的新对象可以传递数据。然后,我选中项目设置中的"注册COM互操作"复选框。这一切似乎都是在本地构建和工作的(我以管理员的身份运行visualstudio)。但是,当我在TFS服务器上签入时,生成失败,并声明:无法注册程序集"MyClient.dll"-访问被拒绝。请确保您以管理员身份运行应用程序。拒绝访问注册表项"HKEY_CLASSES_ROOT\MyClient.MyClass"。有没有办法在构建机器上提升我的令牌,或者其他方法来解决这个问题?
您需要使用生成定义的进程参数中的MSBuild Arguments选项将以下值传递给MSBuild。
/p:RegisterForComInterop=false
我找到了一种工作方法!如果您查看项目中的XML,您会看到一个如下所示的节点:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>binDebug</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<RegisterForComInterop>true</RegisterForComInterop>
</PropertyGroup>
这里的问题当然是告诉项目注册com互操作的行。我还看到了发布配置的类似定义。我可以通过删除行或通过UI取消复选框来解决这个问题,但我的项目中有其他人需要获得代码,如果源代码管理中的项目版本对他们有效会更好。答案是取消选中发布定义上的registerinterop框,但将其保留在调试定义上,然后将生成TFS定义更改为仅为发布而生成。这样,我的同事就可以拥有com对象,构建服务器也不会抱怨。
您的TFS构建代理可能在服务帐户下运行,因此该帐户需要提升权限。您需要将服务帐户添加到生成服务器上的管理员组中。
但是,您的TFS管理员可能不想这样做。即使给予帐户额外的权限不是问题,他们也可能会对您的构建对注册表进行"操作"产生问题。
您可以从c++调用COM组件,而无需注册
这篇关于Registration Free COM的文章更详细地介绍了
我也发现了这个症状,但这是因为windows根据公司的政策进行了公开更新,并得到了JonesCola的推荐。
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- tfs 生成错误 无法注册程序集"MyAssembly.dll" - 访问被拒绝