标签: csc

为什么这个递归不会产生StackOverFlowException?

这段代码有什么问题:

using System;
namespace app1
{
    static class Program
    {
        static int x = 0;
        static void Main()
        {
            fn1();
        }
        static void fn1()
        {
            Console.WriteLine(x++);
            fn1();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用这个命令编译这段代码:

csc /warn:0 /out:app4noex.exe app4.cs
Run Code Online (Sandbox Code Playgroud)

当我双击exe时,它似乎没有抛出异常(StackOverFlowException),并且永远保持运行.

使用visual studio命令提示符2010,但我也在系统上安装了vs 2012,都是最新的.

.net c# stack-overflow recursion csc

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

'作为属性参数的数组不符合CLS'警告,但没有给出类型信息

在编译我的解决方案时,我收到以下几个警告:

warning CS3016: Arrays as attribute arguments is not CLS-compliant
Run Code Online (Sandbox Code Playgroud)

没有给出关于哪种类型不合规的其他信息.在我的项目中,我有一些属性在其构造函数中使用params数组参数,但它们都是内部的,并且不应该影响CLS兼容性.为什么要给出这个警告,它是什么类型的?

.net csc cls-compliant

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

Escape Catch-22在.NET 2.0中具有扩展属性

同时针对2.0,3.0,3.5,4.0和4.5的单个.NET程序集如何支持C#和VB.NET使用者的扩展方法?

标准建议是添加:

namespace System.Runtime.CompilerServices
{
  public sealed class ExtensionAttribute : Attribute { }
}
Run Code Online (Sandbox Code Playgroud)

这种做法被认为一个微软员工,并甚至在特色MSDN杂志.它被许多博主广泛称赞为"没有不良影响".

哦,除了它会导致针对.NET 3.5或更高版本的VB.NET项目的编译器错误.

Microsoft.Core.Scripting.dll的作者发现了这一点,并将"公共"改为"内部".

namespace System.Runtime.CompilerServices
{
  internal sealed class ExtensionAttribute : Attribute { }
}
Run Code Online (Sandbox Code Playgroud)

这似乎解决了VB兼容性问题.

因此,我信任地将该方法用于广泛使用的ImageResizing.Net库的最新版本(3.2.1).

但是随后,我们开始收到此编译器错误(原报告),或多或少随机,对某些用户针对.NET 3.5+.

Error 5 Missing compiler required member
'System.Runtime.CompilerServices.ExtensionAttribute..ctor'
Run Code Online (Sandbox Code Playgroud)

因为MSBuild/VisualStudio编译器在解决命名冲突时显然不打算查看范围规则,并且程序集引用的顺序扮演一个不完全文档化的角色,所以我不完全理解为什么以及何时发生这种情况.

这里有几个哈克变通办法,如改变程序集命名空间,重新创建项目文件,删除/ readding System.Core程序,并与.NET Framework的目标版本摆弄.不幸的是,这些变通方法都不是100%(除了别名,但这是一种令人无法接受的痛苦).

我怎样才能解决这个问题

  1. 维护对程序集内扩展方法使用的支持,
  2. 维护对.NET 2.0/3.0的支持
  3. 每个.NET框架版本不需要多个程序集.

或者,是否有一个修补程序使编译器注意范围规则?

关于SO的相关问题没有回答这个问题

clr extension-methods csc vbc

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

正在编译Release和Debug会生成不同的IL代码+不同的机器代码吗?

我听说在Release模式下编译生成的优化代码比在Debug模式下生成,这很好.

但这是IL的优化吗?一旦CLR运行它,它在机器代码中吗?是否与在Release和Debug中编译的PE不同的元数据结构?

谢谢

.net c# vb.net .net-framework-version csc

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

C#编译器(csc.exe)内存溢出编译嵌套类型和Linq

我发现使用Visual Studio开发了一个不愉快的行为.在编译C#时它挂起了我的机器.

我已经减少了对下一个最小源代码的行为

using System.Collections.Generic;
using System.Linq;

namespace memoryOverflowCsharpCompiler {

    class SomeType { public decimal x; }

    class TypeWrapper : Dictionary<int,
                        Dictionary<int,
                        Dictionary<int, SomeType [] []>>> {

        public decimal minimumX() {
            return base.Values.Min(a =>
                      a.Values.Min(b =>
                      b.Values.Min(c =>
                      c       .Sum(d =>
                      d       .Sum(e => e.x)))));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用.编译

PROMPT> csc source.cs

    *** BANG! overflow memory usage (up to ~3G)

PROMPT> csc /?
Microsoft (R) Visual C# Compiler version 12.0.30501.0
Copyright (C) Microsoft Corporation. All rights reserved.
...
Run Code Online (Sandbox Code Playgroud)

(使用Windows 8.1 …

c# linq csc visual-studio

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

csc.exe引用外部.dll文件

我正在尝试c#使用一个简单的程序Growl C# API.

我尝试用两种不同的方式编译我的程序:

1)我将.dll文件保存在与文件相同的目录中.cs.比我跑

csc /r:Growl.Connector.dll,Growl.CoreLibrary.dll /out:test.exe *.cs
Run Code Online (Sandbox Code Playgroud)

它编译得很好,也运行良好.

2)现在我在当前工作目录中创建了一个名为的目录,growl并保存了我的所有.dll引用.

现在,当我尝试使用以下命令编译它时

csc /r:"D:\Modified\Growl_NET_Connector_SDK\libraries\growl\Growl.Connector.dll","D:
\Modified\Growl_NET_Connector_SDK\libraries\growl\Growl.CoreLibrary.dll" /out:test.exe *.cs
Run Code Online (Sandbox Code Playgroud)

它编译得很好,但是当我试图运行它时,发生了下面提到的异常.

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Growl.Connector, Version=2.0.0.0, Culture=n
eutral, PublicKeyToken=980c2339411be384' or one of its dependencies. The system cannot find the file specified.
 at GrowlNotification.Program.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是当文件在外部文件夹.dllcsc时引用文件的正确方法是什么.

这是第二种情况的目录结构.

c# windows csc

8
推荐指数
1
解决办法
2万
查看次数

使用Visual Studio IDE将编译参数添加到csc命令

该解决方案包括两个项目:main.csprojhelper.csproj.

我喜欢做的是使用dll哪个helper项目将被编译,作为嵌入式资源main.dll.

为此目的,为项目添加自定义编译属性似乎是合理的main:/resource: <path to dll>.

问题是我找不到如何通过Project Property添加此编译参数.

PS也许有人可以建议其他解决方案,以避免在编译过程中进行更改.

.net c# visual-studio-2010 csc

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

在VSTS中进行构建时,如何设置csc langversion?

我有一个简单的测试控制台应用程序。它唯一的代码是

public class Class1
{
    private protected int _value = 0b_1001_0110;
}
Run Code Online (Sandbox Code Playgroud)

这只是测试这些C#7.2功能是否可以构建。

在Visual Studio 2017 15.5.2中,如果我这样设置语言版本,它们可以正常构建

高级构建设置

如果我现在将项目检入VSTS并运行构建,它将失败,并显示各种错误,例如

Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,17):错误CS0107:多个保护修饰符
Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS1013:无效的数字

因为它对C#7一无所知。

如果我现在添加“ Microsoft.NET.Compilers 2.6.1” NuGet软件包并对其进行重建,则该软件包在本地可以正常运行,但在VSTS中使用

Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS8107:功能“前导数字分隔符”在C#7.0中不可用。请使用7.2版或更高版本的语言。

现在使用的是正确版本的CSC.exe,但未传递/ langversion:latest。

在多项目解决方案中,如何在每个项目中正确传递此信息

c# tfs csc azure-devops azure-pipelines

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

C# 中字符串插值内的字符串插值导致编译器错误

以下 C# 表达式会导致我的程序出现编译器错误:

$"Getting image from {location.IsLatitudeLongitude ? $"{location.Latitude} - {location.Longitude}" : location.Location}."
Run Code Online (Sandbox Code Playgroud)

难道不能像这样使用字符串插值吗?或者根本不可能做到这一点?

c# csc string-interpolation

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

公众号有什么作用?

C# 编译器的 -publicsign 选项有什么作用?

我已阅读文档但仍然不明白https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/publicsign-compiler-option

此选项会导致编译器应用公钥但实际上并未对程序集进行签名

什么公钥?怎么申请?

.net c# msbuild csc

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