4

プロジェクト (Windows サービスを実装するコンソール アプリケーション) をコンパイルすると、断続的に上記の警告が表示されます。

(ここに完全な警告テキストがあります)

Warning 1   Assembly 'SMDiagnostics' was referenced transitively and the assembly could not be resolved automatically. 
Static linking will assume this DLL has no dependencies on the F# library or other statically linked DLLs. Consider adding an explicit reference to this DLL.   
FSC 1   1   myService (Applications\myService\myService)

このエラーは何を意味し、何が原因でしょうか?

4

2 に答える 2

5

100%確実ではありませんが、これが私の推測です。

System.ServiceModel を使用しており、プロジェクトに参照として追加しています。次に、ServiceModel は SMDiagnostics アセンブリを使用しますが、プロジェクトで明示的に参照されていません。おそらく --standalone でコンパイルしているので、すべてのアセンブリの推移的な閉鎖を見つけることができないという警告が表示されていますか?

とにかく、SMDiagnostics への明示的な参照を追加すると、警告が消えることを期待しています。とにかく、おそらく無害な警告です(SMDiagnosticsはおそらくGACにあると思うので、実行時に関係なく検出されます)。

于 2011-09-01T18:15:20.220 に答える
0

--lib を設定すると、FS2011 警告が抑制されます。ビルド時に 2 つの DLL ファイルをリンクできるように、fsc.exe に 2 つの DLL ファイルを検索する場所を効果的に伝えます。静的ビルド オプションが気に入っているのは、ソフトウェアを新しい Windows ボックスに解凍し、他の構成を必要とせずに実行できるようにするという目標を達成できるからです。

set FSLIB=--lib:c:\Windows\Microsoft.NET\Framework\v4.0.30319

set compileFlags=--debug:full --standalone --optimize+ --crossoptimize+ --tailcalls+ %FSLIB%

fsc %compileFlags% MyFSharpProgram.fsx

環境変数の代わりに、コンパイル コマンドに以下を追加するだけです。--lib:c:\Windows\Microsoft.NET\Framework\v4.0.30319

必要な DLL を含むディレクトリを、使用したディレクトリに置き換える必要があります。管理者として実行された cygwin find コマンドを使用して、ディレクトリを見つけました。

探す 。| | grep SMDiagnostics

F# (FSC.EXE) コンパイラからの次の警告を解決しました。

警告 FS2011: アセンブリ 'System.ServiceModel.Internals' が推移的に参照され、アセンブリを自動的に解決できませんでした。静的リンクでは、この DLL が F# ライブラリまたは他の静的にリンクされた DLL に依存していないと想定されます。この DLL への明示的な参照を追加することを検討してください。

警告 FS2011: アセンブリ 'SMDiagnostics' が推移的に参照され、アセンブリを自動的に解決できませんでした。静的リンクでは、この DLL が F# ライブラリまたは他の静的にリンクされた DLL に依存していないと想定されます。この DLL への明示的な参照を追加することを検討してください。

ジョー・E

于 2013-04-11T23:53:32.790 に答える