【问题标题】:Compiling Castle.ActiveRecord to allow partial trust?编译 Castle.ActiveRecord 以允许部分信任?
【发布时间】:2013-02-04 05:25:42
【问题描述】:

如何构建 Castle.Core、Castle.ActiveRecord 和 NHibernate 以允许部分信任?网上有很多资源展示了如何做到这一点,但是我发现的每个站点都说使用nant build -D:assembly.allow-partially-trusted-callers=true 来构建每个程序集。当我查看 Castle.Core trunk 时,这里没有 *.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>

说完一切后,我成功地在来自不同域的文件共享上发布了这个应用程序,并且让用户安装该应用程序没有任何问题。将这些步骤应用于我们的其他应用程序并使用我们新编译的程序集也很有效。

【问题讨论】:

标签: nhibernate castle-activerecord castle partial-trust


【解决方案1】:

您需要 MSBuild 4.0,nant 构建脚本早已不复存在。

如果您有 Visual Studio 2010,请打开 Visual Studio 2010 命令提示符,否则请确保您使用来自 .NET 4.0 框架的 MSBuild。

假设您已经为 APTCA 构建了 NHibernate(nant -D:-D:assembly.allow-partially-trusted-callers=true 有效)

  • cd 核心

  • MSBuild buildscripts\build.proj /p:AllowPartiallyTrustedCallers=true /p:Configuration=NET35-Release

  • 将 Castle.Core.dll 从构建文件夹复制到 ActiveRecord\lib\net35

  • cd ActiveRecord

  • MSBuild buildscripts\build.proj /p:AllowPartiallyTrustedCallers=true /p:Configuration=Release /p:FrameworkVersion=v3.5 /p:BuildConfigKey=NET35

【讨论】:

  • 感谢您的回复。我需要什么版本的 Core 和 ActiveRecord?正在使用最新的稳定版 AR (2.1.1)。似乎 AR 的最新稳定版本是 2.1.0,需要 Core 1.2.0,其中不包含 msbuild 脚本。如果我获取 Core 和 AR 的主干版本,我现在可以成功构建所有内容,但 AR v2.1.2 需要 NHibernate 3.0。或者更好的是 Core 和 AR 主干是否足够稳定以用于生产?
  • 您需要 Core 1.2.0(Github 上的 1-2-stable 分支)并且此版本使用 NAnt (nant -D:assembly.allow-partially-trusted-callers=true) .对于 ActiveRecord,您需要 2-1-stable 分支,该分支也使用 NAnt 而不是 MSBuild。
  • 我们在生产中使用主干版本的 Core 和 AR。城堡的后备箱一直很稳定,至少对我们来说是这样。
  • 非常感谢!经过几次打嗝后,我设法让一切正常运行。我的部分问题是配置我的 VS2008 解决方案以允许某些安全功能。
  • 另请参阅城堡用户邮件列表,了解 Mike 如何成功启动和运行:groups.google.com/group/castle-project-users/browse_thread/…
猜你喜欢
  • 2011-03-30
  • 2012-08-25
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多