2014-02-06 5 views
2

Допустим, у меня есть:Лучший способ запустить строку в C# код

@{ 
var str= "DateTime.Now"; 
} 

Я хочу, чтобы обработать эту строку как C# код

@Html.Raw(App.ProcessAsCode(str)); 

Выход должен быть текущее время дата.

+2

Зачем вам это нужно? –

+3

«Лучшее», скорее всего, будет «не делать этого» - это спрашивает, как «eval». В принципе, если вам не нужно * принимать произвольный код в виде текста (который потенциально опасен и вообще полезен только для таких вещей, как онлайн-скрипты), * не *. Итак, какова проблема * реального *? xD – user2864740

+0

'run a string as C# code' Вы имеете в виду, что делает компилятор? Вы не должны делать что-то подобное, и я не вижу причин для этого. –

ответ

5

Final Edit:

на основе дополнительной информации - если целью является просто иметь форматирования двигателя есть много вариантов там. Один такой параметр основан на синтаксисе .liquid от shopify (see here). Вы можете найти порт .NET этого на gitHub здесь: https://github.com/formosatek/dotliquid/. Основной целью этого является то, чтобы превратить что-то вроде:

<h2>{{product.name}}</h2> 

В чем-то вроде:

<h2>Beef Jerky</h2> 

Я настоятельно рекомендую прочитать больше о жидкости двигателя и синтаксис, и я считаю, что это приведет вас в правильное направление. Удачи!


Initial Ответ

Это, безусловно, возможно - хотя, как другие сказали, что вы хотите быть осторожным в том, что вы делаете. С помощью C# ключом к компиляции и запуску кода в общем случае является класс «CSharpCodeProvider». Вот краткий пример того, как это выглядит:

 string[] references = { "System.dll" }; 
     CompilerParams.ReferencedAssemblies.AddRange(references); 

     var provider = new CSharpCodeProvider(); 
     CompilerResults compile = provider.CompileAssemblyFromSource(CompilerParams, formattedCode); 

В этом примере «formattedCode» является строкой с C# код. Любые ссылки должны быть добавлены вручную. Полный пример см. В этом стеке (How to get a Type from a C# type name string?).

ПРИМЕЧАНИЕ. Если все, что вы хотите сделать, это строка формата или что-то простое, что вы можете пройти через строку формата .NET (например, «MM/dd/yyyy»), тогда используйте это при вызове метода «ToString». Это обеспечит пользователю некоторую настраиваемость, при этом все равно убедитесь, что ваша система остается в безопасности. В общем, действующий код на сервере, который не был правильно проверен/экранирован, действительно опасен!

Ссылка - Для справки current msdn page для CSharpCodeProvider также имеет несколько примеров.

+0

Спасибо за ваш ответ, см. Мой комментарий выше. Просто ищет самый быстрый способ написать html PLUS простые фрагменты C# в текстовом редакторе. – eadam

+0

@ Ibn-e-Adam Я считаю, что мое обновление (опубликовано в начале вопроса) - хорошее место для начала. Вы в основном ищете шаблонный движок, например .liquid. Удачи! –

+0

большое вам спасибо :) :) – eadam

0

Другим вариантом будет использование динамического языка, такого как IronRuby или IronPython.

Смежные вопросы