【发布时间】:2016-03-06 20:01:45
【问题描述】:
这是我的代码:
var s = new System.EnterpriseServices.Internal.Publish();
foreach (string file in Directory.EnumerateFiles(@"C:\Program Files\MyFolder\MSPractices"))
{
Console.WriteLine("GACing " + file);
s.GacInstall(file);
}
这些是我正在尝试 GAC 的文件(版本 6.0.1304.0)
Microsoft.Practices.EnterpriseLibrary.Caching.dll Microsoft.Practices.EnterpriseLibrary.Common.dll Microsoft.Practices.EnterpriseLibrary.Data.dll Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll Microsoft.Practices.EnterpriseLibrary.Logging.dll Microsoft.Practices.EnterpriseLibrary.PolicyInjection.dll Microsoft.Practices.EnterpriseLibrary.Security.dll Microsoft.Practices.EnterpriseLibrary.Validation.dll Microsoft.Practices.ServiceLocation.dll Microsoft.Practices.Unity.Configuration.dll Microsoft.Practices.Unity.dll Microsoft.Practices.Unity.Interception.Configuration.dll Microsoft.Practices.Unity.Interception.dll
它们是别人给我的,所以我不确定你在哪里可以得到它们,但肯定可以在线获得。
代码正确输出了该列表并且没有抛出任何异常,但运行 gacutil /l 显示只有少数几个(在下面突出显示)实际安装。
可能出了什么问题?
可能很重要:我真正的问题是,这在我的具有类似代码的 InstallShield InstallScript 安装程序中不起作用(使用 EnterpriseServices.Internal.Publish 对象)。
这个方法不会抛出异常! ...为了任何东西!
Publish pub = new Publish(); pub.GacInstall("foo");没有错误,没有例外。如果路径有效,并且程序集是 强命名,它将正确安装在 GAC 中。效劳于 目标 .NET Frame 版本的程序集。 IE。 .NET Framework 4.0 应用 使用 GacInstall 将正确安装 3.5 目标程序集等。
更新 (2011/12/13) - 使用 ILSpy 查看代码后 功能,我确实发现错误被发送到本地机器的 事件查看器:
不幸的是,事件查看器中的所有事件都只说
在全局程序集缓存中安装失败:foo
【问题讨论】:
标签: c# installshield gac installscript