构建服务器上的Infragistics组件

时间:2010-01-15 12:38:46

标签: licensing build-automation infragistics emptylicenseslicx licenseslicx

我已经“继承”了一个新的(旧的?)Winforms项目,并希望将它放到我们的构建服务器(Bamboo)上。该构建服务器只安装了绝对最小值(.NET 3.5,而不是更多),我们希望保持这种状态。

作为第一步,我将Infragistics组件的所有程序集文件(* .dll)解压缩到一个单独的目录中,并从该本地目录引用它们(而不是依赖它们安装在GAC中)。工作正常。

但是当我尝试在Bamboo上运行这个版本时(使用MSBuild),我不断收到错误:

  

Properties \ licenses.licx(1):错误   LC0004:创建异常   类型   “Infragistics.Win.UltraWinToolbars.UltraToolbarsManager,   Infragistics2.Win.UltraWinToolbars.v7.2,   版本= 7.2.20072.61,文化=中性,   公钥= 7dd5c3163f2cd0cb”   System.ComponentModel.LicenseException

经过一些谷歌搜索后,似乎项目中的那些licenses.licx文件是某种许可方案,以防止工具安装在多台机器上。

但是如何摆脱那些以便我的构建服务器构建工作,没有将完整的Infragistics组件集安装到构建服务器上(这是选项)...

  • 如果我只是从项目中删除它们,那么构建可能会起作用(还没有尝试过),但是我的设计时间经验会受到影响/不能正常工作(两者中哪一个?)
  • 拥有文件以便我的设计时间体验可以阻止自动构建运行....

嗯.....经典捕获22 - 任何出路?

5 个答案:

答案 0 :(得分:24)

我找到解决这个问题的唯一方法是:

  • 在解决方案所在的文件夹中创建一个绝对空(0字节长)的文件licenses.licx
  • 在构建的初始阶段,源是从我的源存储库中提取的
  • 到时候,就在构建开始之前,我将这个空licenses.licx复制到各个项目'licenses.licx目录中的所有现有Properties

有了这个,现在我的两个交互式体验都在工作(因为存在正确的licenses.licx文件),但我的自动构建也没有中断(因为我复制了那个空的licenses.licx文件所有真实的都不会导致构建中的任何中止)

似乎有点hackish - 但它确实有效。希望有一天能在某个地方帮助别人。

更新:我将此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>任务来实现我的目标。

答案 1 :(得分:3)

我们有来自其他公司的组件,但如果在第三方库中使用.Net licensing model,该方法应该有效。

如果您有licenses.licx文件,则库可能会使用.Net licensing model。在构建过程中,它使用lc.exe实用程序来构建二进制许可证文件,然后将其作为嵌入式资源包含在程序集中。

您需要做什么:

  1. 使用lc.exe生成YourApp.exe.licenses文件。其他方法是构建包含licenses.licx的解决方案,并从obj\Debugobj\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. 构建 - 检查 - 提交。
  6. 我不确定lc.exe是如何工作的,但您可能需要不时重建YourApp.exe.licenses文件。

答案 2 :(得分:0)

我可以根据marc_s的答案建立Team City项目,即用空白licenses.licx替换现有的许可证文件。

但是当我尝试在本地计算机上打开具有infragistics控件的aspx页面时,又出现了另一个问题,因为我在本地计算机上安装了infragistics,但我的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>
  • 添加&#39; BeforeBuild&#39; marc_s提到的目标另外我添加了一个条件,当我的构建使用&#39; CI_TeamCity_Build&#39;时,将执行此任务。而不是为了调试&#39;或者&#39;发布&#39;构建

  • Team City构建配置在&#34; VS解决方案构建运行器&#34;中使用上述配置。步。由于&#39; BeforeBuild&#39;在csproj文件中的目标,它用空白替换许可文件并构建成功。

  • 在我的本地计算机上,我继续使用&#39; Debug&#39;或者&#39;发布&#39;构建,因为它不会用空白替换licenses.licx文件。所有infragistics控件都出现在.aspx页面上,没有任何问题。

答案 3 :(得分:0)

我最近使用TeamCity 9.1作为我的构建服务器遇到了这个问题。

当我们最初设置构建服务器时,我们不想在机器上安装Infragistics,因此我们创建了一个References文件夹,我们复制了所需的程序集并将其签入。(我知道这是不可取的但是它是一种解决方法。)

确保项目引用新路径中的程序集。这会在每个程序集的项目文件中创建一个HintPath条目。

最后,手动编辑项目文件以添加 &LT;私人和GT;真&LT; /私人和GT;每个参考。 (将Copy Local属性设置为true并不足够。)

答案 4 :(得分:0)

为了补充上面的答案(即通过创建一个空的licenses.licx文件来解决问题),您可以安装EmptyLicensesLicx nuget包,它将在您的项目中生成一个空的Licenses.licx,在每次编译之前(这就是你需要它才能工作)。