Компилирование Castle.ActiveRecord, чтобы разрешить частичное доверие? - PullRequest
1 голос
/ 10 ноября 2010

Как я могу построить 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 из транка. Для магистрали требуется NHibernate 3.0.0, который не соответствует нашей версии.

Решение

Почти все мои настройки были сделаны на вкладке "Безопасность" в свойствах проекта.

  • В разделе «Зона, из которой будет установлено ваше приложение:« выбранная метка »(Custom)»
  • Что касается разрешений, требуемых приложением, мне пришлось включить 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>

После того, как все было сказано и сделано, я смог успешно опубликовать это приложение на общем файловом ресурсе из другого домена, и пользователи смогли без проблем установить приложение. Применение этих шагов к другим нашим приложениям и использование наших недавно скомпилированных сборок также работало как чудо.

1 Ответ

5 голосов
/ 11 ноября 2010

Вам понадобится MSBuild 4.0 , скрипты сборки nant давно ушли.

Если у вас установлена ​​Visual Studio 2010, откройте командную строку Visual Studio 2010, в противном случае убедитесь, что вы используете MSBuild из среды .NET 4.0.

Учитывая, что у вас есть NHibernate, созданный для APTCA (nant -D: -D: assembly.allow-частично-trust-callers = true works трех)

  • CD Core

  • MSBuild buildscripts \ build.proj / p: AllowPartiallyTrustedCallers = true / Р: Конфигурация = NET35-релиз

  • Скопируйте Castle.Core.dll из папки сборки в ActiveRecord \ lib \ net35

  • cd ActiveRecord

  • MSBuild buildscripts \ build.proj / p: AllowPartiallyTrustedCallers = true / p: конфигурация = выпуск /p:FrameworkVersion=v3.5 / p: BuildConfigKey = NET35

...