Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过nuget包添加代码分析规则集_C#_Powershell_Nuget_Code Analysis_Envdte - Fatal编程技术网

C# 通过nuget包添加代码分析规则集

C# 通过nuget包添加代码分析规则集,c#,powershell,nuget,code-analysis,envdte,C#,Powershell,Nuget,Code Analysis,Envdte,我正在尝试构建一个NuGet包,该包自动添加我们公司的代码分析字典并可更新 规则集添加到内容文件夹中,现在我想使用install.ps1脚本将规则集添加到项目文件中。 我想办法是使用envDTE,但除了这个无法找到CodeAnalysisRuleset节点的压倒性对象图之外,我找不到关于它的更多有用文档。 我在走正确的道路吗? 有关于如何在NuGet powershell中使用envDTE的相关教程/文档吗? 如何运行/调试我的安装脚本,而不必实际将其添加到包中并针对项目进行安装 旁注 尽管@

我正在尝试构建一个NuGet包,该包自动添加我们公司的代码分析字典并可更新

规则集添加到内容文件夹中,现在我想使用install.ps1脚本将规则集添加到项目文件中。
我想办法是使用envDTE,但除了这个无法找到CodeAnalysisRuleset节点的压倒性对象图之外,我找不到关于它的更多有用文档。

我在走正确的道路吗?
有关于如何在NuGet powershell中使用envDTE的相关教程/文档吗?
如何运行/调试我的安装脚本,而不必实际将其添加到包中并针对项目进行安装

旁注
尽管@Nicole Calinoiu展示了更好的方法,但这一点信息可能会在以后派上用场:

foreach ($config in $project.ConfigurationManager){
  $config.Properties.Item("CodeAnalysisRuleSet").Value = "myruleset.ruleset"
}

没有必要编写这个脚本。可以通过导入的MSBuild
.props
文件注册规则集和字典,如下所述

例如,您的NuGet源文件夹结构可能如下所示(假设“CodeAnalysisSettings”是您的包ID):

  • 建造
    • CodeAnalysisSettings.props
  • 内容
    • MyCustomDictionary.xml
    • MyRules.ruleset
其中
CodeAnalysisSettings.props
的内容如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <RunCodeAnalysis>true</RunCodeAnalysis>
        <CodeAnalysisRuleSet>MyRules.ruleset</CodeAnalysisRuleSet>
    </PropertyGroup>
    <ItemGroup>
        <CodeAnalysisDictionary Include="MyCustomDictionary.xml" />
    </ItemGroup>
</Project>

真的
MyRules.ruleset

您也可以使用以下步骤手动执行此操作

  • 右键单击项目
  • 转到属性
  • 转到下拉列表[运行此规则集]
  • 选择[浏览..]选项
  • 选择可以放置在源代码中预定义位置的公司规则集
  • 单击“打开”窗口上的“打开”
  • 保存项目文件

您可以对解决方案中的其他项目重复此步骤

我遇到了与评论中报告的问题相同的问题:字典是作为内容添加的,而不是作为
CodeAnalysisDictionary

我在nuget软件包的install.ps1中添加了这段代码来解决这个问题:

$dictionary = $project.ProjectItems | Where-Object {$_.Name.EndsWith("CustomDictionary.xml")}
$dictionary.Properties.Item("Buildaction").Value = [int]5;

该死!我昨天晚上才找到的!我也完成了导入字典的程序包。谢谢:)这里有什么我遗漏的吗?我创建了props文件,但是NuGet将CodeAnalysisDictionary添加为
内容的一种类型,而它应该是
CodeAnalysisDictionary
的一种类型。我不知道为什么。但是,当我对cs文件使用
Compile
时,它工作得很好。这是因为VS UI使用与代码分析MSBuild文件不同的规则来决定内容类型。尽管UI显示异常,但您应该发现您的字典正在被代码分析使用。@NicoleCalinoiu:遗憾的是,事实并非如此。我创建了一个NuGet软件包,并在本地硬盘上发布了它。当我通过“Manage NuGet Packages…”添加包时,它确实正确地将文件添加到了正确的位置。但是,由于字典被标记为
内容类型
而不是
CodeAnalysisDictionary
,因此代码分析引擎无法识别它,也不会使用自定义字典。您可以通过打破CA1709规则(创建一个名为
NuGet
的公共类)来重现此问题。将字典(通过NuGet)添加为
内容
并不能解决此问题。@NicoleCalinoiu:您能否分享您的NuGet解决方案(解包和打包)以及一个示例项目。每当我使用NuGet获取导入的字典文件时,VS2013都会将其标记为
内容的一种类型,而CodeAnalysis引擎会忽略它。。。引擎只会在文件的“属性”下查找标记为
CodeAnalysisDictionary
的文件。这就是我们今天要做的。但是我们有数百个项目,总的浪费时间加上不时发生的人为错误。nuget软件包会更有趣。