标签: csc

67
推荐指数
5
解决办法
7万
查看次数

C#中的幂等修饰符

我注意到如果我写的东西如下:

static void Main(string[] args)
{
    const const const bool flag = true;
}
Run Code Online (Sandbox Code Playgroud)

编译器不会警告我多个consts.所以这似乎模仿C修饰符,因为它们是幂等的.

但是,如果我写:

private readonly readonly int a;
Run Code Online (Sandbox Code Playgroud)

编译器确实警告我重复readonly.

那么这里发生了什么?修饰语是否是幂等的?


csc版本1.0.0.50618

c# csc

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

如何获取csc.exe路径?

有没有办法获取最新的.NET Framework的csc.exe的路径?

该文件通常位于:c:\ Windows\Microsoft.NET\Framework\vX.X.XXX但问题是可以安装多个版本+有32位和64位版本.

对此有何解决方案?

.net c# csc

51
推荐指数
6
解决办法
8万
查看次数

为什么我会选择除512以外的C#编译器文件对齐设置?

我可以在MSDN中看到如何更改C#编译的文件对齐方式(通过项目设置和命令行).

我用谷歌搜索并看到文章解释512字节的文件对齐减少了.dll的大小.我已经使用不同的文件对齐测试了自己,并且看到了,是的,确实如此.

我的问题是:

为什么我要使用不同的文件对齐?必须有这样的场景,或者没有选项吗?

此外,它究竟做了什么?MSDN页面谈论部分?什么是部分?

http://msdn.microsoft.com/en-us/library/0s4tzdf2.aspx

UPDATE

在我自己的调查中,我有谷歌"C#文件对齐",".net汇编文件对齐"等,并最终找到:

https://msdn.microsoft.com/en-us/magazine/bb985992.aspx

它是从2002年开始的,所以我不知道它会有多大帮助.如果有人能让我知道我应该谷歌搜索......

c# compiler-construction csc

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

为什么C#在CSC文件上给我这个错误?

我是C#开发的新手,我有以下问题.

当我尝试构建我正在工作的应用程序时,我获取以下错误消息:

Error   2   Source file 'Log\LogUserManager.cs' could not be found  C:\Develop\MyFramework4.0\MyManagerCSharp\CSC   MyManagerCSharp
Error   8   Source file 'AntiPhishing.cs' could not be found    C:\Develop\EarlyWarning\public\Implementazione\Ver2\UnitTestProject\CSC UnitTestProject
Run Code Online (Sandbox Code Playgroud)

它向我发出这些错误是在SVN更新后出现的.

为什么?究竟意味着什么?如果我单击错误行,则不会将我带到出现错误的代码行.什么是CSC文件?怎么可以尝试修复这个问题?

TNX

.net c# asp.net csc

34
推荐指数
4
解决办法
5万
查看次数

有没有办法获得Visual Studio使用的构建命令行?

我想从命令行进行构建,但我想从Visual Studio(2012)中获取确切的命令行语法,这样我就不必手动找出所有的标志,导入和其他参数.

有没有办法让Visual Studio显示这些信息?

csc vbc visual-studio-2012

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

MSBUILD/csc:处理x64 mscorlib警告的最简洁方法1607

我正在尝试使用VS08SP1的默认项目系统以显式x64模式调用C#编译(与之不同AnyCpu).当我明确地将模块标记为x64时,我得到一个:

警告CS1607:程序集生成 - 引用程序集"mscorlib.dll"针对不同的处理器

删除它的一种方法是使用/nowarn:1607. 根据我的研究,这样做在实践中没有问题.如果有人能够遇到他们遇到过的现实问题,请随时回答.

但是,这只是感觉不对!所以我使用的另一种方法是做/nostdlib+,然后添加<Reference>一个硬编码<HintPath>到显式64位mscorlib:

<Reference Include="mscorlib">
  <HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

这可行并且可能更好(除非有人关心指出为什么以前的方法更好),但是有人可以确认这是一个合适的事情,希望引用一些具有权威性的东西吗?

msbuild 64-bit warnings csc mscorlib

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

PDB文件在第二次编译时变大,然后保持相同的大小

使用以下简单文件:

using System;

public class Program{
        [STAThread]
        public static void Main(string[] args){
            Console.WriteLine("Boo");
        }
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令:

csc /target:exe /debug:pdbonly HelloWorld.cs
Run Code Online (Sandbox Code Playgroud)

如果运行此命令且P​​DB尚不存在,则PDB文件大小为12KB.否则,如果PDB文件存在,则新文件大小为14KB.

Microsoft (R) Visual C# Compiler version 4.0.30319.17929
.NET 4.5
Run Code Online (Sandbox Code Playgroud)

有什么想法可以解释这个吗?

更新:

  1. 我没有使用.NET 3.5和.NET 4的评论.
  2. 使用pdb2xml(http://blogs.msdn.com/b/jmstall/archive/2005/08/25/sample-pdb2xml.aspx),我看不出小的和大的之间有什么区别.

.net c# csc

28
推荐指数
2
解决办法
1145
查看次数

为什么C#编译器会在此代码上崩溃?

为什么下面的代码会崩溃.NET编译器?它在csc.exe 4.0版上进行了测试.

请参阅此处以获取不同版本的在线演示 - 它以相同的方式崩溃,同时表示不支持动态https://dotnetfiddle.net/FMn59S:

编译错误(第0行,第0列):内部编译器错误(地址xy处的0xc0000005):可能的罪魁祸首是"TRANSFORM".

虽然扩展方法很好List<dynamic>.

using System;
using System.Collections.Generic;

static class F  {
    public static void M<T>(this IEnumerable<T> enumeration, Action<T> action){}

    static void U(C.K d) {
        d.M(kvp => Console.WriteLine(kvp));
    }
}

class C  {
    public class K : Dictionary<string, dynamic>{}
}
Run Code Online (Sandbox Code Playgroud)

更新:这不会使编译器崩溃

static void U(Dictionary<string, dynamic> d)
{
    d.M(kvp => Console.WriteLine(kvp));
}
Run Code Online (Sandbox Code Playgroud)

更新2:在http://connect.microsoft.com/VisualStudio/feedback/details/892372/compiler-error-with-dynamic-dictinoaries中报告了相同的错误.针对FirstOrDefault报告了该错误,但似乎编译器在应用于从Dictionary <T1,T2>派生的类的任何扩展方法上崩溃,其中至少有一个参数类型是dynamic.请参阅Erik Funkenbusch对以下问题的更一般描述.

更新3:另一种非标准行为.当我尝试将扩展方法作为静态方法调用时,也就是说F.M(d, kvp => Console.WriteLine(kvp));,编译器不会崩溃,但它无法找到重载: Argument 1: cannot convert from 'C.K' to 'System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,dynamic>>'

更新4 …

c# csc

26
推荐指数
2
解决办法
2040
查看次数

如何用特定语言版本编译C#

假设我想向某人演示有关C#4.0和5.0中foreach之间的差异.

所以我写了我的代码片段:

public static void Main()
{
    string[] fruits = { "Apple", "Banana", "Cantelope" };
    var actions = new List<Action>();
    foreach (var fruit in fruits)
    {
        actions.Add(() => Console.WriteLine(fruit));
    }

    foreach(var a in actions)
    {
        a();
    }   
}
Run Code Online (Sandbox Code Playgroud)

但无论我如何编译它,它总是像5.0 *一样工作.我已经尝试在csproj文件中设置语言版本(Build - > Advanced - > Language Version),我尝试在命令行上构建它:

csc myProgram.cs /langversion:4
Run Code Online (Sandbox Code Playgroud)

我不能让它以"旧"的方式工作.有帮助吗?如果您可以告诉我如何在命令行和Visual Studio上执行此操作,可以获得奖励积分.

*对于任何不知道的人,在C#中.<= 4.0这将打印Cantelope Cantelope Cantelope,而在C#5.0+中它将(更直观地)打印Apple Banana Cantelope.这是一个链接,这是另一个.

c# csc

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