C# tfs生成错误无法注册程序集;MyAssembly.dll";-拒绝访问

C# tfs生成错误无法注册程序集;MyAssembly.dll";-拒绝访问,c#,c++,.net,tfs,visual-studio-2013,C#,C++,.net,Tfs,Visual Studio 2013,我有一个C#web服务项目。我创建了一个客户端,用于创建和管理与服务的连接。我们有一个更老的PC产品,用C++编写,他们需要有一个接口来调用服务。我在客户机上为它们创建了一些调用,并使COM可见的新对象可以传递数据。然后,我选中项目设置中的“注册COM互操作”框。这一切似乎都是在本地构建和工作的(我以管理员的身份运行VisualStudio)。但当我在TFS服务器上签入时,生成失败,声明:无法注册程序集“MyClient.dll”-访问被拒绝。请确保您以管理员身份运行应用程序。对注册表项“HKE

我有一个C#web服务项目。我创建了一个客户端,用于创建和管理与服务的连接。我们有一个更老的PC产品,用C++编写,他们需要有一个接口来调用服务。我在客户机上为它们创建了一些调用,并使COM可见的新对象可以传递数据。然后,我选中项目设置中的“注册COM互操作”框。这一切似乎都是在本地构建和工作的(我以管理员的身份运行VisualStudio)。但当我在TFS服务器上签入时,生成失败,声明:无法注册程序集“MyClient.dll”-访问被拒绝。请确保您以管理员身份运行应用程序。对注册表项“HKEY\U CLASSES\U ROOT\MyClient.MyClass”的访问被拒绝。
是否有方法提升生成计算机上的我的令牌或其他方法来解决此问题?

您需要使用生成定义的进程参数中的MSBuild Arguments选项将以下值传递给MSBuild


/p:RegisterForComInterop=false

您的TFS生成代理可能正在服务帐户下运行,因此该帐户需要提升权限。您需要将服务帐户添加到生成服务器上的administrators组中

但是,您的TFS管理员可能不希望这样做。即使给予帐户额外的特权不是问题,他们也可能会对您的构建对注册表进行“填充”产生问题


关于免费注册,COM将提供更详细的信息

我找到了一种方法来实现这一点!如果查看项目中的XML,您会看到如下节点:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' ==  'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <OutputPath>bin\Debug\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
     <PlatformTarget>x86</PlatformTarget>
     <UseVSHostingProcess>false</UseVSHostingProcess>
     <RegisterForComInterop>true</RegisterForComInterop>    
</PropertyGroup>

真的
满的
假的
bin\Debug\
调试;痕迹
促使
4.
x86
假的
真的

这里的问题当然是告诉项目注册com互操作的那一行。我还看到了发布配置的类似定义。我可以通过删除行或通过UI取消选中框来解决这个问题,但是项目中有其他人需要获取代码,如果源代码管理中的项目版本对他们有效,那就更好了。答案是取消选中发布定义中的RegisterInterop框,但将其保留在调试定义中,然后将BuildTFS定义更改为仅针对发布生成。这样,我的同事就可以拥有com对象,而构建服务器就不会抱怨。

将此添加到我的构建定义中,并且工作正常。谢谢