将我的WinForms VS2013项目升级到VS2015后,我开始看到MSB3884"无法找到规则集文件"警告.
谷歌搜索出现了一篇MSDN文章,Stack Overflow文章指出了这篇文章以及许多其他网站.
类似的问题:33020507 MSDN:VS2015 MSB3884警告
我安装了VS2013和VS2015.
提供警告的项目文件(以及不提供警告的项目文件)没有这些条目.
<CodeAnalysisRuleSetDirectories>
<CodeAnalysisRuleDirectories>
Run Code Online (Sandbox Code Playgroud)
如果我从项目文件中删除其他两个条目,那么问题就会消失,这很明显,因为没有规则文件集.
<CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用msbuild在外部构建,但VS2015也倾向于显示问题.
有趣的是,如果我点击项目属性代码分析器区域中的打开按钮,我确实得到了该文件.
指定不同的规则集没有区别.这让我觉得可能有一个环境变量设置,而不是任何想到的.代码分析器是项目文件的一个功能.我可以添加一个目录属性,但共识是取出路径,<CodeAnalysisRule*Directories>.
GUI使用默认值:
这是一个典型的项目文件片段.
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
<Prefer32Bit>false</Prefer32Bit>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisRuleSet>BasicCorrectnessRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
如果不从项目文件中删除代码分析行,虽然再次保存项目文件只会将其添加回来,如何消除/修复警告?
C#有一个类似于lint的工具吗?我有编译器标记警告 - 作为错误,我有Stylecop,但这些只能捕获最令人震惊的错误.有没有其他必备工具(特别是像我这样的新手C#ers)指出我正在做的可能是愚蠢的事情?
是否有类似于Pylint的内容,它将查看Python脚本(或运行它),并确定每行(或函数)需要哪个版本的Python?
例如,理论用法:
$ magic_tool <EOF
with something:
pass
EOF
1: 'with' statement requires Python 2.6 or greater
$ magic_tool <EOF
class Something:
@classmethod
def blah(cls):
pass
EOF
2: classmethod requires Python 2.2 or greater
$ magic_tool <EOF
print """Test
"""
EOF
1: Triple-quote requires Python 1.5 of later
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?我想最简单的方法是在光盘上安装所有Python版本,运行每个版本的脚本,看看发生了什么错误.
我喜欢我的代码是有序的,即格式正确,可读,设计,测试,检查错误等.事实上我对它很狂热.(甚至可能比狂热更多...)但在我的经验中,帮助代码质量的行动很难实现.(通过代码质量,我的意思是您日常生成的代码的质量.软件质量与开发过程等的整个主题要广泛得多,而不是这个问题的范围.)
代码质量似乎并不受欢迎.我的经验中的一些例子包括
可能每个Java开发人员都知道JUnit,几乎所有语言都实现了xUnit框架,但在我所知道的所有公司中,只有很少的正确单元测试存在(如果有的话).我知道由于技术限制或紧迫的截止日期,并不总是可以编写单元测试,但在我看到的情况下,单元测试可能是一种选择.如果开发人员想为他/她的新代码编写一些测试,他/她可以这样做.我的结论是开发人员不想编写测试.
静态代码分析通常在小型项目中进行,但并不真正用于强制执行编码约定或在企业项目中发现可能的错误.通常甚至会忽略像潜在空指针访问这样的编译器警告.
会议发言人和杂志会谈论很多关于EJB3.1,OSGI,云和其他新技术,但几乎没有关于新的测试技术或工具,新的静态代码分析方法(例如SAT解决方案),有助于保持更高质量的开发流程,如何遗留代码的一些讨厌的野兽被测试,...(我没有参加很多会议,它可能在敏捷主题的会议上看起来不同,因为单元测试和CI等具有更高的价值.)
那么为什么代码质量如此不受欢迎/被认为无聊呢?
编辑:
谢谢你的回答.其中大多数涉及单元测试(并已在相关问题中进行了讨论).但是还有很多其他的东西可以用来保持代码质量很高(参见相关问题).即使您无法使用单元测试,也可以使用每日构建,向IDE或开发过程添加一些静态代码分析,尝试配对编程或强制执行关键代码的审核.
我在一个项目中,以前的程序员一直在复制粘贴代码.这些代码实际上是相同的(或非常相似),它们可以重构为一个.
我花了无数个小时手动重构这些代码,但我认为必须有更好的方法.有些是非常简单的静态方法,可以被移动到祖先类中(但是被以前的初级程序员复制粘贴).
是否有代码分析工具可以检测到这一点并提供报告/建议?如果可能的话,我更喜欢免费/开源工具.
我在Visual Studio 2010中的Mvc 3.0.0.0项目中使用DotNetOpenAuth(引用System.Web.Mvc版本1.0.0.0).
我正在使用程序集绑定重定向,如下所示: -
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
一切正常,除了代码分析,它给我以下错误: -
CA0001:读取模块X时遇到以下错误:无法解析程序集引用:System.Web.Mvc,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35.
和
CA0058:找不到引用的程序集"System.Web.Mvc,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35".此程序集是分析所必需的,并引用:X.
有没有办法让代码分析工具尊重程序集绑定重定向?
code-analysis visual-studio-2010 assemblybinding visual-studio
所以我有一个 C# 类库项目,我只打算在 Windows 上使用。它包含一些使用System.Drawing.Image仅在 Windows 上可用的类的类。升级到 Visual Studio 2022 并将目标框架设置为 .NET 6.0 后,我看到一堆警告:
\n\n\n
CA1416“此调用站点可在所有平台上访问。\'SomeClass.SomeMethod\' 仅在以下平台上受支持:\'windows\'。
请参阅下面的屏幕截图了解一些示例:
\n\n从某种意义上说,VS2022 扫描了库并找到了我在库中使用的所有平台特定代码,这很酷。但我想告诉 VS,我只打算在 Windows 上使用该库,它可以消除所有这些警告。
\n首先,我检查了Target framework项目属性中的选项,但没有看到任何 Windows 特定目标。
然后我决定直接编辑项目.csproj并更改Target framework
<TargetFramework>net6.0</TargetFramework>\nRun Code Online (Sandbox Code Playgroud)\n到
\n<TargetFramework>net6.0-windows</TargetFramework>\nRun Code Online (Sandbox Code Playgroud)\n但是,遗憾的是,即使在重新编译之后,警告也没有消失。然后我读了一些警告CA1416,果然Microsoft Docs中说,评估此警告时会忽略目标框架名称,但是,VS 确实根据影响此警告的 TFM 向项目添加了一个属性,但是仅当项目配置为AssemblyInfo.cs动态生成文件时,它才会这样做。但是,唉,我的项目是AssemblyInfo.cs作为实际文件维护的,而不是在构建时自动生成的。
因此,此时,我已准备好踢球并禁用CA1416我的项目的警告。因此,在项目的.proj文件中,我添加了CA1416发布和调试版本,如下所示:
<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Debug|AnyCPU\'">\n <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\n\n<PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Release|AnyCPU\'">\n <NoWarn>1701;1702;CA1416;</NoWarn>\n</PropertyGroup>\nRun Code Online (Sandbox Code Playgroud)\n … c# code-analysis visual-studio microsoft.codeanalysis .net-6.0
如何使FxCop自定义词典正常工作?
我尝试在文件'CustomDictionary.xml'中添加要识别的单词,该文件与FxCop项目文件保存在同一文件夹中.这似乎不起作用,因为即使重新加载并重新运行FxCop,我仍然会得到'标识符拼写正确'的FxCop消息.使用版本1.36.
有哪些方法可用于确定嵌入式/内存受限系统的最佳堆栈大小?如果它太大那么浪费的内存可以在其他地方使用.但是,如果它太小,那么我们得到这个网站的同名......
为了尝试快速启动:Jack Ganssle在"嵌入式系统设计的艺术"中指出,"凭借经验,人们可以学习标准的,科学的方法来计算堆栈的正确尺寸:随机选择尺寸并希望." 任何人都可以做得更好吗?
要求提供更具体的例子.那么,在没有操作系统的情况下使用IAR Embedded Workbench工具链,针对具有2 kB RAM 的MSP430 MCU的C程序怎么样?使用JTAG调试器时,此IDE可以显示堆栈内容和使用情况.
code-analysis ×10
c# ×3
.net ×1
.net-6.0 ×1
dictionary ×1
embedded ×1
fxcop ×1
java ×1
javascript ×1
lint ×1
localization ×1
memory ×1
msbuild ×1
python ×1
refactoring ×1
stack ×1
unit-testing ×1