C# COM引用名称跨版本更改(从Win7 CERTCLIENTLib到Win8 CERTCLIENTLib)

C# COM引用名称跨版本更改(从Win7 CERTCLIENTLib到Win8 CERTCLIENTLib),c#,git,visual-studio,visual-studio-2012,com,C#,Git,Visual Studio,Visual Studio 2012,Com,我们有一个VisualStudio2012项目C,它使用多个COM引用。我把它带到Git中,弄不清楚如何处理COM引用。如果我以典型方式添加COM引用,添加引用->COM选项卡->选择我的引用,则会出现以下情况: Visual Studio在包含GUID字段和版本字段的*.csproj文件中添加了对引用的提及。因此,我认为Visual Studio在windows\system32文件夹中查找,并在生成时找到必需的DLL。在一些开发PC上,我们有windows 8,而在其他PC上,我们有wind

我们有一个VisualStudio2012项目C,它使用多个COM引用。我把它带到Git中,弄不清楚如何处理COM引用。如果我以典型方式添加COM引用,添加引用->COM选项卡->选择我的引用,则会出现以下情况:

Visual Studio在包含GUID字段和版本字段的*.csproj文件中添加了对引用的提及。因此,我认为Visual Studio在windows\system32文件夹中查找,并在生成时找到必需的DLL。在一些开发PC上,我们有windows 8,而在其他PC上,我们有windows 7,结果表明,每个版本的windows都引用不同版本的COM DLL。因此,如果I:1在Windows 8 PC上添加引用;2将项目提交给Git;3在Windows 7 pc上签出项目;4尝试在windows 7 pc上生成项目-生成失败。这是因为Windows 7 pc上的COM DLL版本与Windows 8 pc上的不同


处理这种情况的最佳方法是什么?我是否应该手动将必要的COM DLL复制到我的项目文件夹中,并在Git中对其进行版本设置?如果我这样做,我将如何处理Microsoft对其DLL进行的更新?是否定期检查windows\system32文件夹中的差异?还有-我应该将哪个版本复制到项目文件夹中-那些与Windows 8或Windows 7一起提供的版本?

我看不出任何主要区别,这两个类型库都是1.0版,并且从Vista开始就没有更改过。在Win7计算机上添加引用会产生完全相同的引用节点:

<COMReference Include="CERTCLIENTLib">
  <Guid>{372FCE32-4324-11D0-8810-00A0C903B83C}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>0</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>tlbimp</WrapperTool>
  <Isolated>False</Isolated>
  <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
<COMReference Include="CERTENROLLLib">
  <Guid>{728AB348-217D-11DA-B2A4-000E7BBB2B09}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>0</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>tlbimp</WrapperTool>
  <Isolated>False</Isolated>
  <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>

将生成的DLL添加到源代码管理并添加对它的引用。请在源代码文件中记下这一点,这可能会在10年后生效。

它是什么COM对象?如果它是随Windows附带的,我不建议将其放在您的回复中。是的-我非常确定我随Windows附带使用的COM引用:CertClient和CertEntRoll那么GUID在Windows版本之间会发生变化吗?@JohnKoerner请看我对Hans帖子的评论。事实证明,它们具有相同的Guid,但由于某些原因,CERTCLIENTLib在Windows 8上作为CERTCLILib引入。谢谢!你是对的-Windows 7和Windows 8电脑上都使用相同的GUID。但是,COMReference名称有一个不同:在Windows 7电脑上,所有东西看起来都与上面显示的完全一样;但在windows 8 PC上,CERTCLIENTLib被CERTCLIENTLib替换,相同的命名差异适用于windows 7 PC上的命名空间:使用CERTCLIENTLib;在Windows 8上:使用CERTCLILib;。我能做些什么呢?我需要按照你的建议自己运行Tlbimp吗?好的,我也看到了。是的,Tlbimp将解决这个问题,将它生成的互操作程序集复制到项目目录中,并将其签入源代码管理。使用“浏览”向其添加引用。在你的源文件中记下这一点,这可能会在10年后生效。谢谢。这太棒了!似乎另一种选择是在编译时注意到开发pc是否有CERTCLIENTLib或CERTCLILib的名称空间,然后使用相应的using表达式?也许这不值得努力?
cd \where\your\project\is\stored
tlbimp c:\windows\system32\certcli.dll