在编译我的项目时(它是一个实施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)
这个错误意味着什么,可能导致什么?
答案 0 :(得分:5)
我不是百分百肯定,这是我的猜测。
您正在使用System.ServiceModel,并将其添加为项目中的参考。反过来,ServiceModel使用SMDiagnostics程序集,但您没有在项目中显式引用它。您可能正在编译--standalone,因此它警告您无法找到所有程序集的传递闭包?
无论如何,我希望如果您添加对SMDiagnostics的明确引用,警告将消失。无论如何,它可能是一个无害的警告(我认为SMDiagnostics可能在GAC中,因此无论如何都会在运行时发现)。
答案 1 :(得分:0)
设置--lib会抑制FS2011警告。它有效地告诉fsc.exe在哪里搜索两个DLL文件,以便它可以在构建时链接它们。我们喜欢静态构建选项,因为它使我们的目标是能够将我们的软件解压缩到新的Windows框并让它在没有其他配置的情况下运行。
设置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的显式引用。 的