4

使用WIX 3.5将一个发布者策略安装到 GAC 中的正确方法是什么?

我试图这样做:

      <File
            Id="LIBGAC"
            Assembly=".net"
            KeyPath="yes"
            Vital="yes"
            Name="ClassLibrary1.dll"
            ProcessorArchitecture="msil"
            DiskId="1"
            Source="..\ClassLibrary1\bin\Release\ClassLibrary1.dll"  >
      </File>
    </Component>
    <Component Id="Config"  Guid="F089B1AA-B593-4662-9DF4-F47EB9FBA1F4"  >
      <File
            Id="LIBGACPolicy"
            Assembly=".net"
            KeyPath="yes"
            Vital="yes"
            Name="Policy.1.0.ClassLibrary1.dll"
            DiskId="1"
            Source="..\ClassLibrary1\policy.1.0.ClassLibrary1.dll"  >
      </File>
      <File 
            Id="LIBGACPolicyConfig" 
            Source="..\ClassLibrary1\policy.1.0.ClassLibrary1.config" 
            CompanionFile="LIBGACPolicy">
      </File>
    </Component>
  </Directory>

用VS2008编译时出现这个错误:

policy.1.0.ClassLibrary1.dll 似乎无效。请确保这是一个有效的程序集文件,并且用户对该文件具有适当的访问权限。更多信息:HRESULT:0x8013101b

最后,使用 VS2010 编译时似乎没有任何问题。但是在完成安装过程时,DLL 已安装好,而发布者策略却没有。我还阅读了安装过程中生成的日志,但找不到原因。

谢谢阅读。

4

3 回答 3

2

我一直在做类似的事情,并且在使用 Visual Studio 2010 和使用 MsBuild 的构建服务器中运行良好:

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="Gac" Name="Gac">
         <!-- The component with the assembly -->
         <Component Id="MiClassDLL" Guid="*">
            <File Id="MiClass.dll" Assembly=".net" KeyPath="yes"
                  Source="$(var.MiClass.TargetPath)" />
         </Component>
         <!-- The component with the policy -->
         <Component Id="PolicyMiClassDLL" Guid="{YOUR_GUID_HERE}">
            <File Id="PolicyMiClass.dll" KeyPath="yes"
                  Source="$(var.MiClass.TargetDir)Policy.1.0.MiClass.dll" />
            <File Id="PolicyMiClass.config" KeyPath="no"
                  Source="$(var.MiClass.ProjectDir)Policy.1.0.MiClass.config" />

         </Component>
      </Directory>
   </Directory>        
</Directory

在我的情况下,我在同一个项目目录中有 policy.config 文件,我在同一个输出中构建了 policy dll,以使安装程序脚本更容易。

我注意到策略组件必须有一个 guid,并且由于某种原因,它在内部需要同一目录/组件中的策略 dll 和配置文件。

我使用以下命令在 MiClass 项目的 Post-Build 事件中构建策略程序集:

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\al.exe"
    /link:"$(ProjectDir)Policy.1.0.MiClass.config"
    /out:"$(TargetDir)Policy.1.0.MiClass.dll"
    /keyfile:"$(SolutionDir)MyKeys.snk"
    /comp:"My Company"
    /prod:"My Product" 
    /productv:1.0 
    /version:1.0.0.0

我希望这对你有用。

于 2012-05-17T16:39:29.980 回答
0

而不是 /link 开关使用 /embed 将 xml-config 编译到发布者策略中。然后您可以将生成的程序集安装到 GAC 中而不会出现问题

于 2013-08-14T11:10:20.270 回答
0

我对策略 dll 做了一些工作,我能看到的唯一区别是您的文件命名约定与我们的略有不同。

代替

policy.1.0.ClassLibrary1.dll
policy.1.0.ClassLibrary1.config

我们用了

policy.1.0.ClassLibrary1.dll
ClassLibrary1.dll.config
于 2011-10-18T21:22:30.020 回答