2011-09-01 5 views
3

간헐적으로 위의 경고가 게시됩니다 (Windows 서비스를 구현하는 콘솔 응용 프로그램입니다).FSC 컴파일 경고 : 어셈블리 'SMDiagnostics'가 일시적으로 참조되어 어셈블리를 자동으로 확인할 수 없습니다.

(여기에 전체 경고 텍스트)

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) 

이 오류가 무엇을 의미 하는가과 원인이 무엇을 할 수 있을까?

답변

5

저는 100 % 확실하지 않습니다, 여기에 제 추측입니다.

System.ServiceModel을 사용하고 있으며 프로젝트에서이 참조를 참조로 추가했습니다. ServiceModel은 SMDiagnostics 어셈블리를 사용하지만 프로젝트에서 명시 적으로 참조되지는 않습니다. 여러분은 아마도 스탠드 얼론으로 컴파일 할 것입니다. 그래서 모든 어셈블리의 임시 클로저를 찾을 수 없다는 것에 대해 경고합니다.

어쨌든 SMDiagnostics에 대한 명시 적 참조를 추가하면 경고가 사라질 것으로 예상됩니다. 어쨌든 아마 무해한 경고 일 것입니다 (SMDiagnostics는 아마도 GAC에있을 것이므로 런타임에 관계없이 발견 될 것입니다).

+0

는 실제로 나는 독립 옵션으로 컴파일하고있다. 나는 이것을 내일 시험해보고 결과를 알려줄 것이다. –

+0

이 작동하고 GAC_MSIL에서 SMDiagnostics.dll을 추가하면 경고가 사라집니다. 많은 감사합니다! –

0

--lib를 설정하면 FS2011 경고가 표시되지 않습니다. 그것은 실제로 fsc.exe에게 두 DLL 파일을 검색 할 위치를 알려줌으로써 빌드시 링크 할 수 있도록합니다. 우리는 정적 빌드 옵션을 좋아합니다. 왜냐하면 우리의 소프트웨어를 새로운 윈도우 박스에 압축을 풀 수 있고 다른 어떤 구성도 필요없이 실행할 수 있기 때문입니다.

세트 FSLIB = - lib 디렉토리 : C : \ WINDOWS \ Microsoft.NET 세트 compileFlags의 =

프레임 워크 \의 v4.0.30319 \ - 디버그 : --standalone 전체를 --optimize + --crossoptimize + - tailcalls + %의 FSLIB %

FSC % compileFlags % MyFSharpProgram.fsx 당신은 단순히 당신의 컴파일 명령에 다음을 추가 할 수있는 환경 변수 대신에

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

우리가 사용한 DLL에 필요한 DLL이 들어있는 디렉토리로 대체해야합니다. 나는 cygwin 찾기 명령을 사용하여 디렉토리를 찾을 수있는 관리자 권한으로 실행했습니다.

find. | 그렙 SMDiagnostics

은 경고 FS2011 F 번호 (FSC.EXE) 컴파일러에서 다음 경고 해결 : 어셈블리 'System.ServiceModel.Internals이'이적으로 참조되었다 어셈블리가 자동으로 확인할 수 없습니다 . 정적 링크는이 DLL이 F # 라이브러리 또는 다른 정적으로 linkedDLL에 의존하지 않는다고 가정합니다. 이 DLL에 대한 명시 적 참조를 추가하는 것이 좋습니다.

경고 FS2011 : 'SMDiagnostics'어셈블리가 일시적으로 참조되었으며 어셈블리를 자동으로 확인할 수 없습니다. 정적 링크는이 DLL이 F # 라이브러리 또는 기타 정적으로 링크 된 DLL에 종속되지 않는다고 가정합니다. 이 DLL에 대한 명시 적 참조를 추가하는 것이 좋습니다.

Joe E