Предупреждение о компиляции FSC: сборка «SMDiagnostics» была переходной, и сборка не может быть разрешена автоматически - PullRequest
4 голосов
/ 01 сентября 2011

Периодически при компиляции моего проекта (это консольное приложение, реализующее службу 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)

Что означает эта ошибказначит и что может быть причиной?

Ответы [ 2 ]

5 голосов
/ 01 сентября 2011

Я не уверен на 100%, вот мое предположение.

Вы используете System.ServiceModel и добавили его в качестве ссылки в свой проект. ServiceModel, в свою очередь, использует сборку SMDiagnostics, но в вашем проекте на нее явно не ссылаются. Возможно, вы компилируете с --standalone, и поэтому он предупреждает вас о невозможности найти транзитивное замыкание всех сборок?

В любом случае, я ожидаю, что если вы добавите явную ссылку на SMDiagnostics, предупреждение исчезнет. В любом случае, это, вероятно, безобидное предупреждение (я думаю, что SMDiagnostics, вероятно, находится в GAC, так что он будет найден во время выполнения независимо).

0 голосов
/ 12 апреля 2013

Установка --lib подавляет предупреждение FS2011. Он эффективно сообщает fsc.exe, где искать два файла DLL, чтобы связать их во время сборки. Нам нравится опция статической сборки, потому что она позволяет нам разархивировать наше программное обеспечение в новую коробку Windows и запустить его без какой-либо другой настройки.

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

set compileFlags = - отладка: полная --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

...