标签: microsoft.codeanalysis

如何修复 Visual Studio 2022 警告 CA1416“所有平台均可访问调用站点”但“仅支持:'windows'”?

所以我有一个 C# 类库项目,我只打算在 Windows 上使用。它包含一些使用System.Drawing.Image仅在 Windows 上可用的类的类。升级到 Visual Studio 2022 并将目标框架设置为 .NET 6.0 后,我看到一堆警告:

\n
\n

CA1416 “此调用站点可在所有平台上访问。\'SomeClass.SomeMethod\' 仅在以下平台上受支持:\'windows\'。

\n
\n

请参阅下面的屏幕截图了解一些示例:

\n

Visual Studio 2022 中的“错误列表”窗格显示多个 CA1416“此调用站点在所有平台上均可访问。\'.\' 仅在:\'windows\' 上受支持。”  错误

\n

从某种意义上说,VS2022 扫描了库并找到了我在库中使用的所有平台特定代码,这很酷。但我想告诉 VS,我只打算在 Windows 上使用该库,它可以消除所有这些警告。

\n

首先,我检查了Target framework项目属性中的选项,但没有看到任何 Windows 特定目标。

\n

项目属性的应用程序 \xe2\x86\x92 常规页面上的“目标框架”下拉框已展开以显示 .NET、.NET Core 和 .NET Framework 的可用版本

\n

然后我决定直接编辑项目.csproj并更改Target framework

\n
<TargetFramework>net6.0</TargetFramework>\n
Run Code Online (Sandbox Code Playgroud)\n

\n
<TargetFramework>net6.0-windows</TargetFramework>\n
Run Code Online (Sandbox Code Playgroud)\n

但是,遗憾的是,即使在重新编译之后,警告也没有消失。然后我读了一些警告CA1416,果然Microsoft Docs中说,评估此警告时会忽略目标框架名称,但是,VS 确实根据影响此警告的 TFM 向项目添加了一个属性,但是仅当项目配置为AssemblyInfo.cs动态生成文件时,它才会这样做。但是,唉,我的项目是AssemblyInfo.cs作为实际文件维护的,而不是在构建时自动生成的。

\n

因此,此时,我已准备好踢球并禁用CA1416我的项目的警告。因此,在项目的.proj文件中,我添加了CA1416发布和调试版本,如下所示:

\n
<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>\n
Run Code Online (Sandbox Code Playgroud)\n …

c# code-analysis visual-studio microsoft.codeanalysis .net-6.0

43
推荐指数
3
解决办法
3万
查看次数

为什么 Microsoft.CodeAnalysis 与 ASP.NET Core 网站一起发布?

我正在发布一个 ASP.NET Core MVC 3.0 网站,输出文件夹包含许多语言的库引用Microsoft.CodeAnalysis,有人知道为什么吗?

当然FxCopAnalyzers,项目中安装了Nuget 包,但它没有在项目的早期版本中发布,所以我不明白为什么现在它应该只在开发时有用,而不是在生产环境中使用。

fxcop asp.net-core microsoft.codeanalysis

18
推荐指数
4
解决办法
5767
查看次数

为什么 Microsoft 分析器找不到 Microsoft.CodeAnalysis?

我正在尝试将Microsoft.CodeAnalysis.FXCopAnalyzers(最新稳定版本)添加到我的 ASP.NET 项目中。当我通过 NuGet 安装它时,我收到了大量错误,例如:

无法从 \packages\Microsoft.CodeQuality.Analyzers.2.6.3\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers.dll 创建分析器 Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.AbstractTypesShouldNotHaveConstructorsAnalyzer 的实例:无法加载文件或程序集'Microsoft.CodeAnalysis, Version=2.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件。无法从 \packages\Microsoft.CodeQuality.Analyzers.2.6.3\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers 创建分析器 Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.AvoidEmptyInterfacesAnalyzer 的实例.dll:无法加载文件或程序集“Microsoft.CodeAnalysis,版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。系统找不到指定的文件。无法从 \packages\Microsoft.CodeQuality.Analyzers.2.6.3\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers 创建分析器 Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.CancellationTokenParametersMustComeLastAnalyzer 的实例.dll:无法加载文件或程序集“Microsoft.CodeAnalysis,版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。该系统找不到指定的文件.. 版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。该系统找不到指定的文件.. 版本=2.6.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。该系统找不到指定的文件..

注意:为了简洁起见,我省略了 127 个错误。它们都非常相似。但需要注意的一件事是,并非所有分析器都在 Microsoft.CodeQuality 命名空间中。有些在 Microsoft.NetCore 中,有些在 Microsoft.NetFramework 中。

所以我说好的,我必须先安装Microsoft.CodeAnalysis v2.6.0.0。看起来很奇怪,这不是 NuGet 自动安装的依赖项,但无论如何。

所以我恢复了我在 Git 中的所有更改,重新打开解决方案,安装 Microsoft.CodeAnalysis v2.6.0.0,然后安装 Microsoft.CodeAnalysis.FXCopAnalyzers 的最新稳定版本。

同样的错误!

当我查看包/Microsoft.CodeAnalysis.2.6.0 时,我注意到那里没有 .dll 。安装它的正确方法是什么?安装 Microsoft.CodeAnalysis 甚至是正确的解决方案吗?为什么安装时没有自动安装Microsoft.CodeAnalysis.FXCopAnalyzers的依赖?这不是包管理器的全部意义吗?我的问题太多,答案太少。请帮忙。

c# code-analysis fxcop analyzer microsoft.codeanalysis

9
推荐指数
2
解决办法
9862
查看次数

目标存在时的代码分析CA0055

我试图首次针对我们的许多不同解决方案运行代码分析.每次我收到CA0055错误("无法加载目标"),尽管目标文件确实存在.

我查看了CodeAnalysis日志,但我无法弄清楚它无法做到的事情.

我在Windows 10上运行Visual Studio 2015(Update 3),但我在VS2013上也遇到了这个问题.该项目是一个针对.NET 4.6.2的ASP.NET Web Forms应用程序,但是是从ASP.NET WebForms 2.0开发的.我在控制台应用程序上也遇到了同样的问题.

Exception堆栈跟踪看起来如下所示 - 我知道它可能并不多,但看起来像加载引用的某种问题可能?

我很感激任何建议 - 谢谢.

<Exception Keyword="CA0055" Kind="AssemblyLoad">
   <Type>Microsoft.FxCop.Common.AssemblyLoadException</Type>
   <ExceptionMessage>Could not load c:\PathToFile\FileBeingAnalysed.dll.</ExceptionMessage>
   <InnerType>System.NullReferenceException</InnerType>
   <InnerExceptionMessage>Object reference not set to an instance of an object.</InnerExceptionMessage>
   <InnerStackTrace>   at Microsoft.FxCop.Sdk.TypeNode.GetNestedType(Identifier name)
   at Microsoft.FxCop.Sdk.Duplicator.VisitTypeReference(TypeNode type)
   at Microsoft.FxCop.Sdk.Duplicator.VisitTypeNode(TypeNode type, Identifier mangledName, TypeNodeCollection templateArguments, TypeNode template, Boolean delayVisitToNestedTypes)
   at Microsoft.FxCop.Sdk.TypeNode.GetTemplateInstance(ModuleNode module, TypeNode referringType, TypeNode declaringType, TypeNodeCollection templateArguments)
   at Microsoft.FxCop.Sdk.TypeNode.GetGenericTemplateInstance(ModuleNode module, TypeNodeCollection consolidatedArguments)
   at Microsoft.FxCop.Sdk.Reader.ParseTypeSignature(MemoryCursor sigReader, Boolean&amp; pinned, Boolean&amp; isTypeArgument)
   at Microsoft.FxCop.Sdk.Reader.GetTypeFromSpec(Int32 …
Run Code Online (Sandbox Code Playgroud)

vb.net code-analysis visual-studio-2015 microsoft.codeanalysis

7
推荐指数
0
解决办法
172
查看次数

如何卸载 Visual Studio 2017 的最新更新?

更新到 Visual Studio 2017 的 6 月 21 日更新后,我无法再构建我的项目。

我收到 BadImageException,Microsoft.CodeAnalysis 上的签名不正确。

我尝试清理解决方案,重新启动计算机,修复 Visual Studio 2017(和 resharper)(按此顺序)。

我可以在发布中构建,但不能在调试中构建。显然,这对我来说是个问题。

如何撤消最新的 Visual Studio 2017 更新?在 Visual Studio 2015 中,您曾经可以简单地撤消更新,但在 Visual Studio 2017 中,这似乎被掩盖了。

updates microsoft.codeanalysis visual-studio-2017

5
推荐指数
1
解决办法
1978
查看次数

Visual Studio 中的警告 C6385

我似乎从 Visual Studio 2019(16.5 预览版,但也在 16.4 及更早版本中)代码分析工具收到错误警告消息。这是一个错误,还是我真的只是错过了什么?

生成的警告(确切地说)是:

警告 C6385:从“prodlist”读取无效数据:可读大小为“(size_t)*32+8”字节,但可以读取“64”字节。

这是生成警告的代码(尽可能少)

#include <cstdint>
#include <string>
#include <iostream>

struct Product {
    std::string price_profile;
};

int getNumRows() {
    return 5;
}

Product *getProductsFromDB( int &numelements ) {
    numelements = 0;

    const int num_rows = getNumRows();
    if ( num_rows == 0 ) {
        numelements = 0;
        return nullptr;
    }

    Product *prodlist = new Product[num_rows];
    for ( int i = 0; i < num_rows; ++i ) {
        prodlist[i].price_profile = "test"; // Warning on this …
Run Code Online (Sandbox Code Playgroud)

c++ sal microsoft.codeanalysis visual-studio-2019

5
推荐指数
1
解决办法
2992
查看次数

是否存在技术原因导致代码分析无法确定该变量已被设置?

我正在等待的 lambda 中对引用类型变量进行初始赋值,如下所示:

private class TestClass {
    public int TestInt;
}

public async Task TestMethod() {
    TestClass testVar;

    await Task.Run(() => {
        testVar = new();
    });

    var testInt = testVar.TestInt;
}
Run Code Online (Sandbox Code Playgroud)

但是,最后一行给出错误“使用未分配的局部变量'testVar'”。是否存在技术原因导致 C# 的代码分析无法确定该变量已保证在该点被赋值?!在我第一次使用的地方使用操作符有点烦人testVar。如果我需要首先在等待的 lambda 中分配变量,并且不能方便地给它默认分配(这是一个相当复杂的类),有什么方法可以解决这个问题?

.net c# roslyn roslyn-code-analysis microsoft.codeanalysis

5
推荐指数
1
解决办法
103
查看次数

在 Roslyn 中将 DeclaredAccessibility 转换为 C# 字符串

我想在代码生成器中实现接口,因此我需要转换Microsoft.CodeAnalysis.Accessibility(即从ISymbol.DeclaredAccessibility)到它们所表示的修饰符关键字。

该枚举在代码分析 API 中用于描述类或其成员的访问修饰符。

例如,如果你有public void MyMember()它的ISymbol.DeclaredAccessibility意志Accessibility.Public。我需要创建这样的方法声明,因此我需要一种转换Accessibility.Publicpublic等的方法(请注意, justToLower只适用于简单的情况,它不会生成protected internal)。

正确的做法是什么?

c# roslyn microsoft.codeanalysis

4
推荐指数
1
解决办法
304
查看次数

SyntaxWalker不访问琐事

鉴于:

使用简单的语法walker我想访问trivias(确切地说是EndOfLineTrivia)

  public sealed class MyWalker : SyntaxWalker
    {
        public int Lines { get; set; }

        public int Trivia { get; set; }

        public int Node { get; set; }

        public override void Visit(SyntaxNode node)
        {
            Node++;
            base.Visit(node);
        }

        protected override void VisitTrivia(SyntaxTrivia trivia)
        {
            Trivia++;
            base.VisitTrivia(trivia);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我这样叫沃克:

    SyntaxTree node = CSharpSyntaxTree.ParseText(sourceCode);
    var root = node.GetRoot();
    var walker = new LocWalker();
Run Code Online (Sandbox Code Playgroud)

问题

永远不会调用重写的VisitTrivia方法.

c# roslyn roslyn-code-analysis microsoft.codeanalysis

3
推荐指数
1
解决办法
146
查看次数

SyntaxWalker Visitor不访问Methods

我有这个步行者

internal class MyWalker : CSharpSyntaxWalker
{
            public int MethodCount { get; private set; }

    public MyWalker() : base(Microsoft.CodeAnalysis.SyntaxWalkerDepth.Trivia)
    { }

    public override void VisitMethodDeclaration(MethodDeclarationSyntax node)
    {
         MyMethodCount ++;
    }

    public override void VisitClassDeclaration(ClassDeclarationSyntax node)
    {
        Class++;
        Complexity++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我用这段代码给walker打电话

    var code = @"
    public class foo
    {
        public void MyMethod()
        {

        }
    }
";

  SyntaxTree node = CSharpSyntaxTree.ParseText(source);
  var root = node.GetRoot();

  var walker = new MyWalker();
  walker.Visit(root);
Run Code Online (Sandbox Code Playgroud)

但从未调用过访问MethodDeclaration.

为了确保我与SyntaxTree Analyzer进行比较,我可以看到roslyn应该将其识别为Method声明. 在此输入图像描述

我错过了什么?

c# roslyn roslyn-code-analysis microsoft.codeanalysis

1
推荐指数
1
解决办法
392
查看次数

是否可以在RoslynPad RoslynCodeEditor控件中为globalsType的对象全局包含intellisense?

我一直在使用RoslynCodeEditor控件并试图找到一种方法将我的全局对象传递给RoslynCodeEditor并在我的脚本中有intellisense.

有没有人知道在使用RoslynCodeEditor控件编辑脚本时如何授予对上下文对象属性或方法的访问权限?

MyContext context = new MyContext();
context.Data = data;
ScriptOptions scriptOptions = ScriptOptions.Default;
scriptOptions = scriptOptions.WithReferences(ReferencesAndImports.References);
scriptOptions = scriptOptions.WithImports(ReferencesAndImports.Imports);
var scriptState = await CSharpScript.EvaluateAsync<string>("int i = 0;", scriptOptions, context, typeof(MyContext));
Run Code Online (Sandbox Code Playgroud)

c# roslyn microsoft.codeanalysis roslynpad

1
推荐指数
1
解决办法
427
查看次数