Dll Wix将组件安装到GAC
我正在尝试将DLL安装到GAC,出现以下错误: 程序集没有强名称或没有使用最小密钥长度签名 代码如下。我该怎么做Dll Wix将组件安装到GAC,dll,wix,gac,Dll,Wix,Gac,我正在尝试将DLL安装到GAC,出现以下错误: 程序集没有强名称或没有使用最小密钥长度签名 代码如下。我该怎么做 <Product Id="4C76EAE3-148A-4597-A994-0178693C5B25" Name="MySolutionInstaller" Language="1033" Version="1.0.0.0" Manufacturer="Me" UpgradeCode="a5e6cbeb-18be-4f7e-9ab5-f1adb1d947eb">
<Product Id="4C76EAE3-148A-4597-A994-0178693C5B25" Name="MySolutionInstaller" Language="1033" Version="1.0.0.0" Manufacturer="Me" UpgradeCode="a5e6cbeb-18be-4f7e-9ab5-f1adb1d947eb">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="MySolutionInstaller" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<!--<Directory Id="INSTALLFOLDER" Name="MyDLLCoreLibrary">-->
<Directory Id="ProductDirectory" Name="MySolutionInstaller">
<Directory Id="GAC" Name="GAC"/>
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents">
<Component Id='DataLibraryGAC' Directory="GAC" Guid='a3b57886-4d27-4e4c-a28f-60a061cdd12d'>
<File Id='DataDLLGAC' Name='MyProject.Data.dll' Source='C:\projects\MyProject.Data\bin\Debug\MyProject.Data.dll'
KeyPath="yes" Assembly=".net" />
<!--<RemoveFile Id="RemoveDataDLLGAC" Name="My.Data.dll" On="uninstall" />-->
</Component>
</ComponentGroup>
</Fragment>
此错误表明程序集未使用强名称密钥签名。我们需要使用.snk文件对程序集进行签名,以便在GAC中安装它。检查以签署组件。另一种解决错误的方法是不将其放入GAC中。而是将程序集放在EXE可以找到它的地方。最简单的布局都在一个文件夹中。但还有其他选项,如自动探测子文件夹,如所述
不安装到GAC中的一个优点是,您仍然可以将安装程序设计为在没有管理员的情况下运行。我曾尝试对程序集进行签名,但现在出现此错误-“Friend assembly reference无效。强名称签名的程序集必须在其InternalsVisibleTo声明中指定公钥。”在我的dll中引用的第三方dll会发生什么情况?我想强烈命名,例如mvcContrib?如果我不将程序集放在gac中,但放在公共文件夹中,我是否仍需要为每个依赖项目引用它?这是否意味着它将出现在每个项目的bin中?我想避免这种情况,因为DLL变得相当大。让我们把一个程序集相对于一个硬盘驱动器是如何变大的问题放在一边。程序集、GAC或EXE上或下的文件夹只有两个“公共”位置。如果有多个EXE需要从同一文件夹加载公共程序集,则必须对它们进行排列,使程序集位于加载它的EXE的文件夹或其下方。所以这意味着所有的EXE都在一个文件夹中,或者分散到一个decent文件夹中,公共程序集的EXE值等于或低于最低EXE值。注意:您询问的是运行已安装的应用程序。在开发设备上,复制本地是最方便的。这是一种特殊情况,但是如果您编写代码(通常在EXE中)来查找程序集,您可以在任何地方找到程序集。请参阅,“当[程序集的[每个内置]解析[方法]失败[ed]时发生”,最后一次成功或失败取决于处理事件的方法。