Подтвердить что ты не робот

Компоненты Infragistics на сервере сборки

Я унаследовал новый (старый?) проект Winforms и хотел бы разместить его на нашем сервере сборки (Bamboo). Этот сервер сборки имеет только абсолютный минимум (.NET 3.5 и не намного больше), и мы хотели бы сохранить его таким образом.

В качестве первого шага я извлек все файлы сборки (*.dll) для компонентов Infragistics в отдельный каталог и ссылался на них из этого локального каталога (вместо того, чтобы полагаться на их установку в GAC). Работает нормально.

Но когда я пытаюсь запустить эту сборку на Bamboo (используя MSBuild), я продолжаю получать ошибки:

Свойства\license.licx(1): ошибка LC0004: возникло исключение тип "Infragistics.Win.UltraWinToolbars.UltraToolbarsManager, Infragistics2.Win.UltraWinToolbars.v7.2, Версия = 7.2.20072.61, Культура = нейтральная, PublicKeyToken = 7dd5c3163f2cd0cb" System.ComponentModel.LicenseException

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

Но как я могу избавиться от них, чтобы моя сборка сборки сборки работала, без, устанавливая полный компонент Infragistics на сервер сборки (это НЕ опция)??

  • Если я просто удалю их из проектов, сборка может работать (еще не пробовалась), но тогда мой опыт разработки будет страдать/не работать (какой из двух?)
  • с файлами вокруг, так что мой опыт работы с дизайном предотвращает прохождение автоматической сборки....

Хммм.... классический улов-22 - в любом случае из этого??

4b9b3361

Ответ 1

Единственный способ решить эту проблему - это:

  • создайте абсолютно пустой (0 байтовый) файл licenses.licx в моей папке, где находится решение
  • на начальных этапах сборки источник извлекается из моего исходного репозитория
  • когда придет время, незадолго до начала сборки, я копирую этот пустой licenses.licx поверх всех существующих licenses.licx в каталоге различных проектов Properties

С этим теперь у меня работает как мой интерактивный опыт (поскольку имеются подходящие файлы licenses.licx), но моя автоматическая сборка также не прерывается (поскольку этот пустой файл licenses.licx я копировал все реальные не вызывает прерываний в сборке)

Кажется немного хакерским - но он работает. Надежда, которая помогает кому-то, где-то, когда-нибудь.

Обновление: Я добавил этот шаг BeforeBuild к моему файлу сборки MSBuild, чтобы скопировать пустой файл *.licx в нужные мне местоположения:

<Target Name="BeforeBuild">
   <CreateItem Include="licenses.licx">
       <Output TaskParameter="Include" ItemName="EmptyLicensesLicx" />
   </CreateItem>

   <Copy SourceFiles="@(EmptyLicensesLicx)" 
         DestinationFolder="(your-target-folder-here)" 
         ContinueOnError="true" />

</Target>

Так как мне нужно заменить этот файл *.licx в нескольких местах, у меня есть несколько таких задач <Copy> для достижения моей цели.

Ответ 2

У нас есть компоненты из другой компании, но этот подход должен работать, если . Модель сетевого лицензирования используется в сторонней библиотеке.

Если у вас есть файл licenses.licx, то библиотека, вероятно, использует . Модель сетевого лицензирования. Во время процесса сборки он использует утилиту lc.exe для создания файла двоичных лицензий, а затем он включен в сборку как встроенный ресурс.

Что вам нужно сделать:

  • Сгенерировать YourApp.exe.licenses файл с помощью lc.exe. Другой способ - создать решение, содержащее licenses.licx и получить его из каталога obj\Debug или obj\Release. Этот шаг должен быть выполнен на машине, где компоненты установлены и зарегистрированы. Также может потребоваться ввести код лицензии, как в нашем случае.
  • Исключить license.licx из проекта.
  • Добавить YourApp.exe.licenses для проекта в качестве встроенного ресурса.
  • Откройте .csproj вашего приложения и отредактируйте запись для файла YourApp.exe.licenses. У вас будет что-то вроде этого <EmbeddedResource Include="YourApp.exe.licenses" /> Оно должно быть изменено на

    <EmbeddedResource Include="YourApp.exe.licenses" >
          <LogicalName>YourApp.exe.licenses</LogicalName>
    </EmbeddedResource>
    

    Это необходимо для исключения пространства имен из имени ресурса.

  • Сборка - проверка - фиксация.

Я не уверен, как работает lc.exe, но вам, вероятно, потребуется время от времени обновлять файл YourApp.exe.licenses.

Ответ 3

Я мог бы построить проект Team City на основе ответа marc_s, заменив существующий файл лицензии пустым license.licx.

Но возникла еще одна проблема, когда я попытался открыть страницы aspx с элементами управления infragistics на локальной машине, это дает ошибку, поскольку у меня есть infragistics, установленная на локальной машине, но мои лицензии .licx пусты.

Я нашел обходное решение для этого, как показано ниже:

  • Создал новую конфигурацию в Visual Studio специально для создания проектов в Team City

введите описание изображения здесь

<Target Name="BeforeBuild" Condition="$(Configuration)==CI_TeamCity_Build">
    <CreateItem Include="$(MSBuildProjectDirectory)\licenses.licx">
      <Output TaskParameter="Include" ItemName="EmptyLicensesLicx" />
    </CreateItem>
    <Copy SourceFiles="@(EmptyLicensesLicx)" DestinationFolder="$(MSBuildProjectDirectory)\Properties\" ContinueOnError="true" />
</Target>
  • Добавлена ​​цель "BeforeBuild", как указано в marc_s, добавлено условие, что эта задача будет выполнена, когда моя сборка использует "CI_TeamCity_Build", а не для "Debug" или "Release" build

  • Конфигурация Team City build использует вышеприведенную конфигурацию в шаге "VS Solution Build Runner". Из-за цели "BeforeBuild" в файле csproj он заменяет файл лицензии пустым, а сборка завершается успешно.

  • На моей локальной машине я продолжаю использовать сборку "Debug" или "Release", поскольку она не заменит файл license.licx на пустой. Все элементы управления infragistics отображаются на странице .aspx без каких-либо проблем.

Ответ 4

Недавно я столкнулся с этой проблемой, используя TeamCity 9.1 в качестве моего сервера сборки.

Когда мы изначально настраивали сервер сборки, мы не хотели устанавливать Infragistics на машине, поэтому мы создали папку "Ссылки", в которой мы скопировали необходимые сборки и проверили их. (Я знаю, что это нежелательно, но это работать вокруг.)

Убедитесь, что проекты ссылаются на сборки по новому пути. Это создает запись HintPath в файле проекта для каждой сборки.

Наконец, отредактируйте файл проекта вручную, чтобы добавить < & частного GT; Правда </Частный > к каждой ссылке. (Недостаточно установить для свойства Copy Local значение true.)

Ответ 5

Чтобы дополнить ответы выше (то есть решить проблему путем создания пустого файла licenses.licx), вы можете установить пакет nuget EmptyLicensesLicx, и он будет генерировать пустой Licenses.licx в вашем проекте, прежде чем он будет скомпилирован каждый раз (что является все что нужно для работы).