如何构建 Castle.Core、Castle.ActiveRecord 和 NHibernate 以允许部分信任?网上有很多资源展示了如何做到这一点,但是我发现的每个站点都说用来nant build -D:assembly.allow-partially-trusted-callers=true
构建每个程序集。当我在这里查看 Castle.Core主干时,没有 *.build 文件。
如何实现?我正在使用 .NET 3.5 。这不是一个网络应用程序。
编辑:我们正在使用 NHibernate 2.1.2GA(我相信是最新的稳定版本)。下面给出的说明的问题在于,他们似乎指的是从主干构建 Castle.Core 和 Castle.ActiveRecord。Trunk 似乎需要与我们的版本不匹配的 NHibernate 3.0.0。
解决方案
几乎我所有的调整都是在项目属性下的安全选项卡中完成的。
- 在“将安装您的应用程序的区域:”标签下,我选择了“(自定义)”
- 至于应用程序所需的权限,我必须包括 SqlClientPermission 以及 UIPermission。为了消除未来开发的问题,我选择了“授予程序集对 x 的无限制访问”,其中选择的权限是什么。这是为上面显示的两个权限完成的。请注意,您选择包含的权限将基于每个应用程序,并且没有两种情况是相同的。
- 在“高级...”按钮下,我取消了两个选项(“使用所选权限集调试此应用程序”和“授予应用程序访问其原始站点的权限”)。
此外,由于应用程序和 SQL Server 位于不同的域下,我必须将连接字符串设置为包括数据库服务器域。所以我原来的连接字符串数据源必须从“Data Source=DB_SERVER”变成“Data Source=DB_SERVER.DOMAIN”。
最后,我必须设置requirePermission="false"
我所有的配置部分。我的configSections
结局是这样的:
<configSections>
<section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" requirePermission="false"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" requirePermission="false"/>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
<section name="hibernate-configuration" requirePermission="false" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
</configSections>
在一切都说完之后,我成功地在来自不同域的文件共享上发布了这个应用程序,并且让用户安装应用程序没有任何问题。将这些步骤应用于我们的其他应用程序并使用我们新编译的程序集也很有效。