C# ClickOnce清单文件-复制;文件";正在生成的条目

C# ClickOnce清单文件-复制;文件";正在生成的条目,c#,com,clickonce,manifest,C#,Com,Clickonce,Manifest,我的ClickOnce应用程序遇到了各种各样的问题,尽管我努力解决了这些问题,但我还是在最后的关卡上摔倒了 我需要我的WPF(.Net 4.0)应用程序在我的项目中包括一个COM组件和3个DLL。COM组件是: 以及3个DLL,它们需要位于可执行目录中: COM组件还需要一个自定义的.manifest文件,我的项目将使用该文件:下面是其中的一个示例部分,引用了其中一个DLL: <file name="BytescoutVideoMixerFilter.dll" asmv2:size

我的ClickOnce应用程序遇到了各种各样的问题,尽管我努力解决了这些问题,但我还是在最后的关卡上摔倒了

我需要我的WPF(.Net 4.0)应用程序在我的项目中包括一个COM组件和3个DLL。COM组件是:

以及3个DLL,它们需要位于可执行目录中:

COM组件还需要一个自定义的
.manifest
文件,我的项目将使用该文件:下面是其中的一个示例部分,引用了其中一个DLL:

  <file name="BytescoutVideoMixerFilter.dll" asmv2:size="203368" xmlns="urn:schemas-microsoft-com:asm.v1">
<hash xmlns="urn:schemas-microsoft-com:asm.v2">
  <dsig:Transforms>
    <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
  </dsig:Transforms>
  <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
  <dsig:DigestValue>JYpOccueoR7YDchdz+iCMPquHtg=</dsig:DigestValue>
</hash>
<comClass clsid="{4407F28D-97C2-41C5-A23F-2FAE465CE7BB}" threadingModel="Both" tlbid="{8EDAD3BB-AE5F-43B4-A2F1-B04F4130F2E0}" description="Bytescout Video Mixer Filter" />
。。。因此,一个文件有两个部分;第一个是我清单中的设置,另一个似乎是在没有
comClass
行的情况下自动生成的。当然,由于两者都引用相同的DLL,Windows会抱怨并拒绝运行应用程序

所以我被困在岩石和坚硬的地方之间:

  • 如果我将DLL构建操作设置为Resource(或其他任何内容),则它们不会包含在已发布的包中。由于发布的
    .manifest
    文件引用了这些文件,ClickOnce包不会部署-它会抱怨“缺少文件”(例如
    BytescoutVideoMixerFilter.dll.deploy
  • 如果我将DLL构建操作设置为Content,它们将包含在已发布的包中,但是已发布的清单现在有重复的条目

如果我能解决这两个问题中的任何一个,我就完蛋了,我再也不会碰COM了。但是,我已经尝试了所有的方法:如果不破坏清单文件,我就无法获取发布包中包含的文件

我设法找到了一种解决办法。这很可怕,但我:

  • 将项目中DLL的生成操作更改为“无”
  • 在项目中创建了一个名为“Resources”的文件夹,并将DLL的单独副本放在其中。在这些基础上的构建操作是“内容”
  • 发布项目现在包括Resources文件夹中的DLL,扩展名为
    .deploy
  • 我将这些
    .deploy
    文件复制到父目录
  • 我现在可以通过ClickOnce下载/更新应用程序
我拼凑了一个脚本,将文件复制到正确的位置。这是一种痛苦,当然不是我必须期望去做的事情——但它是有效的

  <file name="BytescoutVideoMixerFilter.dll" asmv2:size="203368" xmlns="urn:schemas-microsoft-com:asm.v1">
    <hash xmlns="urn:schemas-microsoft-com:asm.v2">
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>JYpOccueoR7YDchdz+iCMPquHtg=</dsig:DigestValue>
    </hash>
    <comClass clsid="{4407F28D-97C2-41C5-A23F-2FAE465CE7BB}" threadingModel="Both" tlbid="{8EDAD3BB-AE5F-43B4-A2F1-B04F4130F2E0}" description="Bytescout Video Mixer Filter" />
  </file>
  <file name="BytescoutVideoMixerFilter.dll" size="203368">
    <hash>
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <dsig:DigestValue>JYpOccueoR7YDchdz+iCMPquHtg=</dsig:DigestValue>
    </hash>
  </file>