Требуется сборка не на C #, так как компилятор C # генерирует чистый MSIL, и для CPUID нет инструкции MSIL.Вопрос, который вы связали, включает в себя CPUID как данные, а не код, который довольно хрупок, и вам приходится обращаться за пределами .NET к Win32 API, чтобы пометить исполняемый файл данных, что, кажется, противоречит вашему желанию «без внешней сборки».
Однако вы можете скомпилировать свой код C # как .netmodule и использовать компоновщик C ++ / CLI для объединения некоторых функций, использующих CPUID, с выходными данными компилятора C #.В итоге вы получите единственную сборку смешанного режима, созданную набором инструментов C ++ / CLI, но большая ее часть будет написана на C #.
Для этой опции проще всего было бы создать Func<uint>
или Func<uint, uint>
делегируйте из кода, вызывающего CPUID, и передайте этот делегат в код C #, вместо того, чтобы пытаться заставить код C # вызывать функцию по имени (это позволяет избежать циклической ссылки между двумя проектами).