使用 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安装得很好 出版商政策没有。我也读了安装过程中生成的日志,但我找不到原因。
感谢阅读。
答案 0 :(得分:2)
我一直在做类似的事情并使用Visual Studio 2010和带有MsBuild的Build Server中运行良好:
<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文件放在同一个项目目录中,并在同一输出中构建策略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
我希望这适合你。
答案 1 :(得分:0)
我对策略dll做了一些工作,唯一的区别是我的文件命名约定与我们的有点不同。
而不是
policy.1.0.ClassLibrary1.dll
policy.1.0.ClassLibrary1.config
我们使用了
policy.1.0.ClassLibrary1.dll
ClassLibrary1.dll.config
答案 2 :(得分:0)
而不是/ link开关使用/ embed将xml-config编译为发布者策略。然后你可以毫无问题地将生成的程序集安装到GAC中