19

新しい(古い?)Winformsプロジェクトを「継承」し、ビルドサーバー(Bamboo)に配置したいと思います。そのビルドサーバーには、絶対最小値(.NET 3.5以降)のみがインストールされており、その状態を維持したいと考えています。

最初のステップとして、Infragisticsコンポーネントのすべてのアセンブリファイル(* .dll)を別のディレクトリに抽出し、そのローカルディレクトリから参照しました(GACにインストールされていることに依存するのではありません)。正常に動作します。

しかし、このビルドをBambooで(MSBuildを使用して)実行しようとすると、エラーが発生し続けます。

Properties \licenses.licx(1):エラーLC0004:タイプ'Infragistics.Win.UltraWinToolbars.UltraToolbarsManager、Infragistics2.Win.UltraWinToolbars.v7.2、Version = 7.2.20072.61、Culture = neutral、PublicKeyToken=7dd5c3163f2cd0cb'システムの作成中に例外が発生しました.ComponentModel.LicenseException

少し調べてみるとlicenses.licx、プロジェクト内のこれらのファイルは、ツールが複数のマシンにインストールされるのを防ぐための、ある種のライセンススキームのようです。

しかし、ビルドサーバーに完全なInfragisticsコンポーネントセットをインストールせずに、ビルドサーバービルドが機能するように、これらを取り除くにはどうすればよいですか(これはオプションではありません)??

  • プロジェクトからそれらを削除するだけでは、ビルドは機能する可能性がありますが(まだ試していません)、設計時のエクスペリエンスが低下するか、機能しません(2つのうちどちらですか?)
  • 私の設計時の経験が機能するようにファイルを用意しておくと、自動ビルドが実行されなくなります。

うーん....古典的なキャッチ22-これからの方法は??

4

5 に答える 5

28

この問題を解決するために私が見つけた唯一の方法はこれです:

  • licenses.licxソリューションが存在するフォルダーに完全に空の(0バイト長)ファイルを作成します
  • ビルドの初期段階で、ソースは私のソースリポジトリから抽出されます
  • 時が来たら、ビルドが始まる直前に、さまざまなプロジェクトのディレクトリにlicenses.licxある既存のものすべてにこの空をコピーしますlicenses.licxProperties

これで、(適切なlicenses.licxファイルが存在するため)インタラクティブなエクスペリエンスが両方とも機能するようになりましたが、自動ビルドも壊れません(licenses.licx実際のファイルすべてにコピーした空のファイルは、ビルドで中断を引き起こさないため) )。

少しハックっぽいようですが、機能します。それが誰か、どこか、いつか役立つことを願っています。

更新:この手順をMSBuildビルドファイルに追加BeforeBuildして、空の*.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>、目標を達成するためにそれらのタスクがいくつかあります。

于 2010-01-19T09:31:50.157 に答える
4

他社のコンポーネントがありますが、サードパーティのライブラリで.Netライセンスモデルを使用している場合、このアプローチは機能するはずです。

ファイルがある場合licenses.licx、ライブラリはおそらく.Netライセンスモデルを使用します。ビルドプロセス中に、lc.exeユーティリティを使用してバイナリライセンスファイルをビルドし、埋め込みリソースとしてアセンブリに含まれます。

するべきこと:

  1. YourApp.exe.licenseslc.exeを使用してファイルを生成します。もう1つの方法は、またはディレクトリを含むソリューションを構築し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. ビルド-チェック-コミット。

lc.exeがどのように機能するかはわかりませんが、YourApp.exe.licensesファイルを時々再構築する必要があります。

于 2015-07-06T22:32:55.730 に答える
1

上記の回答を補完するために(つまり、空のlicenses.licxファイルを作成して問題を解決する)、EmptyLicensesLicx nugetパッケージをインストールすると、Licenses.licx毎回コンパイルされる前に、プロジェクトに空が生成されます(必要なのはこれだけです)。それが機能するために)。

于 2017-10-20T14:42:39.013 に答える
0

marc_sによる回答に基づいて、つまり既存のライセンスファイルを空白のlicenses.licxに置き換えることで、TeamCityプロジェクトを構築できます。

しかし、ローカルマシンでインフラジスティックスコントロールを備えたaspxページを開こうとすると、別の問題が発生しました。ローカルマシンにインフラジスティックスをインストールしているのに、licenses.licxが空白であるためエラーが発生します。

私はこれの回避策を以下のように見つけました:

  • 特にTeamCityでプロジェクトを構築するために、VisualStudioで新しい構成を作成しました

ここに画像の説明を入力してください

<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>
  • marc_sで言及されているように「BeforeBuild」ターゲットを追加しました。さらに、ビルドが「Debug」または「Release」ビルドではなく「CI_TeamCity_Build」を使用しているときにこのタスクが実行されるという条件を追加しました。

  • Team Cityビルド構成は、「VSSolutionBuildRunner」ステップで上記の構成を使用しています。csprojファイルの「BeforeBuild」ターゲットが原因で、ライセンスファイルが空白のファイルに置き換えられ、ビルドが成功します。

  • ローカルマシンでは、licenses.licxファイルが空白のファイルに置き換えられないため、「Debug」または「Release」ビルドを引き続き使用します。すべてのインフラジスティックコントロールは、問題なく.aspxページに表示されます。

于 2016-07-29T05:13:51.920 に答える
0

最近、ビルドサーバーとしてTeamCity 9.1を使用して、この問題に遭遇しました。

ビルドサーバーを最初にセットアップしたとき、マシンにInfragisticsをインストールしたくなかったので、必要なアセンブリをコピーしてチェックインするReferencesフォルダーを作成しました(これは望ましくないことはわかっていますが、回避策です)。 。)

プロジェクトが新しいパスのアセンブリを参照していることを確認します。これにより、各アセンブリのプロジェクトファイルにHintPathエントリが作成されます。

最後に、プロジェクトファイルを手動で編集して、各参照に<Private> True</Private>を追加します。(Copy Localプロパティをtrueに設定するだけでは不十分でした。)

于 2016-08-24T19:51:26.063 に答える