我想从命令行构建项目.是否可以在不安装Visual Studio的情况下部署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
有没有办法获取最新的.NET Framework的csc.exe的路径?
该文件通常位于:c:\ Windows\Microsoft.NET\Framework\vX.X.XXX但问题是可以安装多个版本+有32位和64位版本.
对此有何解决方案?
我可以在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#开发的新手,我有以下问题.
当我尝试构建我正在工作的应用程序时,我获取以下错误消息:
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
我想从命令行进行构建,但我想从Visual Studio(2012)中获取确切的命令行语法,这样我就不必手动找出所有的标志,导入和其他参数.
有没有办法让Visual Studio显示这些信息?
我正在尝试使用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)
这可行并且可能更好(除非有人关心指出为什么以前的方法更好),但是有人可以确认这是一个合适的事情,希望引用一些具有权威性的东西吗?
使用以下简单文件:
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)
如果运行此命令且PDB尚不存在,则PDB文件大小为12KB.否则,如果PDB文件存在,则新文件大小为14KB.
Microsoft (R) Visual C# Compiler version 4.0.30319.17929
.NET 4.5
Run Code Online (Sandbox Code Playgroud)
有什么想法可以解释这个吗?
更新:
为什么下面的代码会崩溃.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#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.这是一个链接,这是另一个.