Вопрос

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

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

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

Свойства\лицензии.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 - есть какой-нибудь выход из положения??

Это было полезно?

Решение

Единственный способ, который я нашел для решения этой проблемы, заключается в следующем:

  • создайте абсолютно пустой файл (длиной 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> задачи для достижения моей цели.

Другие советы

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

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

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

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

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

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

  5. Сборка - Проверка - Фиксация.

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

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

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

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

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

enter image description here

<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'

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top