Интеграция FxCop выдает ошибку: FAKE F#MAKE
Я использую FxCop в FAKE, но он дает ошибку, т.е.
Analysis was not performed; at least one valid rules assembly and one valid target file must be specified.
* 1 total analysis engine exceptions.
Пока все цели успешно построены.
вот мой код:
Target "FxCop" (fun _ ->
!! (buildDir + "/**/*.dll")
++ (buildDir + "/**/*.exe")
|> FxCop (fun p ->
{p with
//Override default parameters
ReportFileName = testDir + "FXCopResults.xml";
ToolPath = "D:/Fake/FAKE-Calculator/tools/FxCop/FxCopCmd.exe"})
)
Также отображается: Ошибка проекта: цели не выбраны.
1 ответ
Документация FAKE не дает ясного объяснения, но, очевидно, вам нужно явно указать одну из двух вещей:
- Какие правила FxCop вы хотите запустить, или
- Путь к "файлу проекта FxCop" (файл с
.FxCop
расширение).
Я не могу рассказать вам, как написать файл проекта FxCop, поскольку сам никогда этого не делал, но, возможно, программист, который настроил систему MsBuild, с которой вы работали, уже сделал это. Если он это сделал, то вам просто нужно добавить следующий параметр в ваш FxCop
вызовите в вашем скрипте сборки FAKE:
ProjectFile = buildDir </> "filename.FxCop"
где filename
Разумеется, следует заменить реальным именем файла.
Если у вас нет FxCop
файл проекта, то, очевидно, вы должны явно указать список правил FxCop в RuleLibraries
параметр. Во-первых, вам нужно выяснить, какие правила FxCop доступны. Для этого загляните в каталог установки FxCop (в моей системе, где у меня установлена более старая версия FxCop, она была C:\Program Files (x86)\Microsoft FxCop 1.36
, но это может отличаться для вас) для Rules
папка. Эта папка должна содержать несколько DLL; например, в моей системе Rules
папка содержит:
- DesignRules.dll
- GlobalizationRules.dll
- InteroperabilityRules.dll
... и несколько других DLL, которые я не собираюсь печатать. Теперь вы просто превращаете этот список имен файлов в список F#:
RulesLibraries = ["DesignRules.dll"; "GlobalizationRules.dll"] // and so on
Для этого должны быть разумные значения по умолчанию, но в настоящее время похоже, что вы должны указать этот список правил вручную. Поэтому попробуйте написать свою цель, чтобы она выглядела примерно так:
Target "FxCop" (fun _ ->
!! (buildDir + "/**/*.dll")
++ (buildDir + "/**/*.exe")
|> FxCop (fun p ->
{p with
//Override default parameters
ReportFileName = testDir + "FXCopResults.xml";
RulesLibraries = ["DesignRules.dll"; "GlobalizationRules.dll"] // etc.
ToolPath = "D:/Fake/FAKE-Calculator/tools/FxCop/FxCopCmd.exe"})
)
Не забудьте отделить элементы списка с помощью ;
(точка с запятой): в F# ,
(запятая) символ только для кортежей. И не просто скопируйте мой пример дословно, а посмотрите в своем каталоге установки FxCop, чтобы увидеть, какие библиотеки правил доступны, и включите их. (Столько, сколько нужно вашему проекту).
Кроме того, я не знаю, нужно ли вам указывать .dll
продление срока действия; вы могли бы использовать ["DesignRules"; "GlobalizationRules"]
(и так далее). Но, вероятно, так же просто использовать .dll
расширение и просто скопировать и вставить из имен файлов.
Я не проверял это сам, поэтому я надеюсь, что это работает для вас. Если это не так, дайте мне знать.