Как я могу скомпилировать .NET 3.5 С# код в системе без Visual Studio?
У меня есть код С#, который использует некоторые конструкции, специфичные для .NET 3.5. Когда вы устанавливаете дистрибутив .NET Framework, вы получаете с ним компилятор С# (csc.exe). Даже если я укажу csc.exe в C:\Windows\Microsoft.NET\Framework\v3.5, я не могу скомпилировать код на компьютере с только установленной платформой .NET Framework, но не Visual Студия. Я могу скомпилировать код, который без проблем использует конструкторы v2.0. Как я могу это сделать?
Вот пример, демонстрирующий мою проблему:
using System;
class Program
{
public static void Main()
{
// The MacOSX value to the PlatformID enum was added after
// .NET v2.0
if (Environment.OSVersion.Platform == PlatformID.MacOSX)
{
Console.WriteLine("Found mac");
}
Console.WriteLine("Simple program");
}
}
При компиляции этого кода с помощью csc.exe я получаю следующую ошибку:
test.cs(9, 58): ошибка CS0117: "System.PlatformID" не содержит определения для "MacOSX"
При выполнении csc.exe /?
я получаю баннер:
Microsoft (R) Visual С# 2008 компилятор версии 3.5.21022.8
для Microsoft (R).NET Framework версии 3.5
Авторское право (C) Корпорация Microsoft. Все права защищены.
Ответы
Ответ 1
Microsoft (R) Visual С# 2008 компилятор версии 3.5.21022.8
Эта старая оригинальная версия .NET 3.5. Пакет обновления 1 имеет довольно неудачное имя, произошли большие изменения. У меня нет машины времени, чтобы проверить, добавила ли она член MacOSX. Сроки совпадают с совпадением с Silverlight.
Включите Windows Update или установите SP1 напрямую.
Ответ 2
Относительно вашей ошибки:
PlatformId.Xbox и Значения PlatformId.MaxOSX были представленный в .NET Framework 2.0 SP2, 3.0 SP2 и 3.5 SP1.
Вероятно, поэтому вы не можете скомпилировать свой пример с помощью командной строки. Когда SP1 установлен, ваш номер версии для 3.5 SP 1 должен выглядеть следующим образом:
Microsoft (R) Visual С# 2008 компилятор версии 3.5.30729.4926
В MSDN имеется целый раздел о Создание командной строки.
Если вы работаете на компьютере, который имеет только .NET Framework SDK, вы может использовать компилятор С# по команде если вы используете команду SDK Подсказка, доступная из Меню Microsoft.NET Framework SDK вариант.
В нем также указано, что произойдет, если у вас установлено несколько версий .NET Framework:
Обычно исполняемый файл csc.exe расположенный в Microsoft.NET\Framework \ папку в системном каталоге. это местоположение может отличаться в зависимости от точная конфигурация для любого человека компьютер. Несколько версий этого исполняемый файл будет присутствовать на компьютер, если более одной версии .NET Framework установлена на компьютер. Для получения дополнительной информации о такие установки, см. Определение Какая версия .NET Framework Установлен.
Пример
csc File.cs
В моем случае я могу сделать:
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319>
csc somefile.cs
Это должно выводить примерно так:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319 > CSC
Microsoft (R) Visual С# 2010 компилятор версии 4.0.30319.1
Авторское право (C) Корпорация Microsoft. Все права защищены.
Ответ 3
Слышали ли вы о MSBuild? =)
Файлы проекта Visual Studio являются (под капотом) файлами MSBuild, а также могут преобразовывать файлы решений в файлы MSBuild, что фактически означает, что вы может использовать MSBuild из командной строки для создания решения Visual Studio.
Например, скажем, у меня есть проект, расположенный в C:\Repositories\Work\MyProject\
с ассоциированным файлом решения MyProject.sln
, и я могу сделать следующее в командной строке:
C:\Users\Me \ > CD\
C: \ > CD Windows\Microsoft.NET\Framework\v3.5
C:\Windows\Microsoft.NET\Framework\v3.5 \ > MSBuild/p: Configuration = debug
Затем MSBuild будет создавать любые проекты в этом решении, которые настроены для сборки для конфигурации debug
, и вывести что-то похожее на следующее:
Версия движка Microsoft (R) 3.5.30729.4926 [Microsoft.NET Framework, версия 2.0.50727.4952] Авторское право (C) Microsoft Corporation 2007. Все права защищены.
Сборка началась 17/02/2011 14:55:49. проект "C:\репозиториев\работа\MyProject\MyProject.sln" на node 0 (цели по умолчанию).
Конфигурация здания "Debug |.NET". проект "C:\репозиториев\работа\MyProject\MyProject.sln" (1) строит "c:\Репозиториев\работа\MyProject\MyProject\MyProject.csproj" (2) на node 0 (цели по умолчанию).
Обработка 0 файлов EDMX. Законченный обработка 0 файлов EDMX. CoreCompile: Пропуск целевой "CoreCompile", потому что все выходные файлы обновляются с к входным файлам. CopyFilesToOutputDirectory: копирование файла из "obj\Debug\MyProject.dll" в "Бин\MyProject.dll". MyProject → C:\репозиториев\работа\MyProject\MyProject\Bin\Ultra.Clie nt.dll Копирование файла из "obj\Debug\MyProject.pdb" в "Бин\MyProject.pdb". Сделано здание проект "C:\репозиториев\работа\MyProject\MyProject\Ultra.Cli ent.csproj" (цели по умолчанию).
Ultra_Client_Setup: проект "MyProject.Setup" не выбран для построение в конфигурации решения "Debug |.NET". Готовый строительный проект "C:\репозиториев\работа\MyProject\MyProject.sln" (целевые цели).
Сборка выполнена успешно. 0 Предупреждение (и) 0 Ошибка (ы)
Истекшее время 00: 00: 00.92
Предостережение: MSBuild не способен обрабатывать проекты настройки
Ответ 4
Скорее всего, у вас есть переменная среды, указывающая на неправильную версию фреймворка