web-dev-qa-db-ja.com

licenses.licxファイルの使用方法

私のプロジェクトプロパティの1つに含まれているlicenses.licxファイルを持っています。 dllでどのように使用されているのかわかりません。 msbuildで使用されていますか?ソリューションの構築時にどのように使用されるのかご存知ですか?

49
CharithJ

Licenses.licx file woes

これをASP.NET、WTF部門に提出してください。

欲求不満コントロールを使用してWebアプリケーションを開発しているとき、licenses.licxと呼ばれる不思議なファイルが表示されます。いいえ、それは奇妙な名前のロリポップを使用するための注文ではありませんが、ライセンスチェックに参加するVisual Studioによって生成(および変更)された移行ファイルです。デザインモードでは、Visual Studioはこのファイルを使用して、デザインで使用するすべてのライセンスコントロールをメモします。その後、アプリケーションをビルドすると、Visual Studioはこのlicenses.licxファイルを読み取り、そこに記載されているすべてのコントロールについて、関連するアセンブリを読み込み、そのアセンブリでライセンスコードを実行して、アセンブリが適切にライセンスされているかどうかを確認します(つまり、製品それが属するマシンは、そのマシンに適切にインストールされています)。すべてがチェックアウトされると、Visual Studioはライセンスキーを実行可能ファイルに埋め込みます。そうでない場合、コントロールがライセンスされていないという奇妙なエラーメッセージが表示されます(私のお気に入りは、「ライセンスファイル 'licenses.licx'をバイナリリソースに変換できませんでした」。祖先)。

Licenses.licxは実際にはソリューション内のファイルです(そこに表示されない場合は、[すべてのファイルを表示]をクリックします)。 Visual Studioはlc.exeというプログラムを使用して、ライセンスをアプリケーションの埋め込みリソースにコンパイルします。ライセンスのコンパイルで問題が発生した場合、この実行可能ファイルを参照するエラーメッセージも表示されます。

Licenses.licxファイルの行の例を次に示します。

DevExpress.XtraCharts.Web.WebChartControl、DevExpress.XtraCharts.v8.2.Web、Version = 8.2.4.0、Culture = neutral、PublicKeyToken = 9b171c9fd64da1d1

このコンマ区切りリストの最初の値はクラス、2番目はそれが見つかったアセンブリ、その他の値はアセンブリの厳密な名前の残りの部分です。特に、使用しているサードパーティ製コントロールの最新バージョンにソリューションをアップグレードする場合は、すでに問題が発生していると確信しています。必要に応じて、このファイルを編集し、問題なく厳密な名前の部分を削除できます。

しかし、それはlicenses.licxの最大の問題ではありません。問題は、Visual Studioがソリューションを開くとこのファイルに触れる傾向があるということです(つまり、ファイルの日付を現在の日付/時刻に変更する場合のように "タッチする")。これは、ライセンスのないマシンでソリューションを開いて、ソース管理を使用している場合は特に、ライセンスに混乱をもたらします。突然、あなたのビルドマシンはこれらの「変換できない」メッセージを投げ出し、あなたは何が悪かったのか疑問に思うようになります。別の一般的な問題は、ソリューションに取り組んでいる開発者のチームがある場合です。彼らは全員、このファイルを無意識に「変更」しています。

したがって、その答えは、licenses.licxファイルをソース管理下に置かないことです。 (KB記事)

しかし、この問題の解決策は別の赤旗を投げます:チームの開発者の1人がライセンスを必要とする新しいコントロールをフォームに追加すると、ローカルのlicenses.licxファイルに行が追加され、ソース管理に反映されない場合があります。 Bam、ビルドマシンはビルドに失敗し、コントロールを追加したJoeは、誰かがビルドを中断するまでチームのドーナツを購入する必要があります。

残念ながら、「licenses.licxをソース管理に入れない」ことが、誰もがライセンス問題を解決している方法のようだからです。別の解決策は、licenses.licxファイルを完全に削除し、ソリューションを開いてVisual Studioに再生成させることです(ビルドマシンでは少し難しいですが)。

とにかく、すべてが何らかの形で役立つことを願っています。そして、ラップトップを電話で打つことは、本当に助けにはなりません。

19
CharithJ

StellarElevenの返信 が役に立たないことを示しているので、もっと簡単なものを探していると思います。これはおそらく100%正確ではありませんが、これがどのように機能するかは私の理解です:

Licxファイルは、アプリケーションで使用される「ライセンスされた」コンポーネントの単なるリストです。

ファイルの各行の形式は次のとおりです。

[Component Name], [Assembly Name]

たとえば、私のプロジェクトの1つでは、ライセンスされたIP Works NetDialコンポーネントを使用しているため、.licxファイルには次の行が含まれています。

nsoftware.IPWorks.Netdial, nsoftware.IPWorks

プロジェクト(.csproj)ファイルのコンテキストでは、.licxファイルはEmbeddedResourceとして参照されます。ビルドプロセス中に、 LC.exe は、ビルドを実行するマシンに問題のコンポーネントの適切なライセンスがあることを確認し、最終的にリソースとして埋め込まれる.licensesファイルを生成します( [AssemblyName] .exe.licenses)最終的な実行可能ファイル。

これは役立ちますか?

30

チェックインリストに存在する場合、このコンテンツを明示的にnullにするカスタムチェックインポリシー(TFS)を使用します。

1
Miki