2015-02-07 3 views
1

Итак, я взглянул на исходный код System.Console here.Как скомпилировать System.Console в C#

Я думал, что было бы интересно посмотреть, как оно реализовано и, возможно, внести некоторые изменения.

Итак, я скопировал исходный код непосредственно из примера Microsoft и вставил его в Visual Studio.

Он не компилируется.

Win32Native.Beep(frequency, duration); 

Существует несколько строк, подобных этому. Все они с тем же сообщением об ошибке.

Error 32 The type or namespace name 'Win32Native' could not be found (are you missing a using directive or an assembly reference?) 

Существует около сотни сообщений об ошибках, но только 4 уникально-ish. Включая главный выше.

Error 85 The name '__Error' does not exist in the current context  

Error 89 Cannot take the address of, get the size of, or declare a pointer to a managed type ('Win32Native.CHAR_INFO') 

Error 18 The property or indexer 'System.Console.InternalSyncObject' cannot be used in this context because it lacks the get accessor 

Я сильно подозреваю, что мне не хватает ссылок на сборку. Если вы знаете, что они мне дали, чтобы я мог скомпилировать это.

+5

Возможно, будет сложно получить этот источник для компиляции, если вы выборочно копируете файлы. Конкретная проблема, которую вы упомянули, связана с отсутствием Win32Native.cs: http://referencesource.microsoft.com/#mscorlib/microsoft/win32/win32native.cs. –

+0

Вы просто забыли скопировать весь куча дополнительного кода. Расположен в другом месте, например, объявления pinvoke в Win32Native. Просто используйте referenceource.microsoft.com и нажмите на идентификатор, чтобы найти код. –

ответ

2

Разве вы не знали, что Microsoft публикует компилируемый исходный код в GitHub?

https://github.com/dotnet/corefx/tree/master/src/System.Console/src

Чтобы собрать его, следуйте this guide.

Рациональный позади, как это,

  • В Эталонные источники уже доступны раньше под совместимой лицензией, не OSI. Из-за недостающих файлов вы не можете их скомпилировать. Теперь Microsoft помещает их под совместимую с OSI лицензию.
  • Microsoft публикует источники ссылок и некоторые другие исходные файлы вместе, чтобы сформировать новый стек .NET Core с открытым исходным кодом в GitHub.

Теперь вы можете найти https://github.com/dotnet/corefx и https://github.com/dotnet/coreclr. Больше вещей приходят, поэтому вы можете следить за http://dotnet.github.io/

+0

Я слышал только, что Microsoft открыла свой стек. Я думал, что я нашел это действительно так. Но это не так. Кажется, что у вас есть ссылка, это настоящая вещь. При этом вы должны отредактировать свой ответ, чтобы отметить, что исходный код, который они опубликовали, является неполным, что означает, что все еще не доступно. –

+0

Кроме того, тот, кто дал вам минус 1, вероятно, вывел в свой ответ оскорбительный тон. Вы можете перефразировать его, прежде чем другие сделают то же самое. –

+0

Нет, это не может быть правильно. OpenStandardInput() имеет совершенно другое определение в ссылке, которую вы мне отправили. –