Компиляция с CodeDomProvider не позволяет новые возможности C# или VB

Вы можете сделать это несколькими способами. Либо в конструкторе вашей библиотеки классов, либо используйте ее как службу, создав конструктор без параметров с методом, который выполняет вашу логику.

В идеальном решении я бы рекомендовал разбить ваш код на три проекта. Тот, который получает доступ к вашим данным и получает все, что вам нужно. Тот, который обрабатывает всю вашу логику с данными, полученными от уровня данных. Наконец, ваш проект MVC, который имеет дело только с уровнем логики.

Чтобы ответить на ваш вопрос сейчас:

public class UnlockUser
{
     public UnlockUser(string user, string env)
     {
         //Do logic with params
     }

}

В вашем контроллере добавьте:

    else
    {
        //pass userid & envid to UnlockUser Class will go here
        var foo = new UnlockUser(userId, envId);
        var result = user + " | " + environment;
        return Json(result, JsonRequestBehavior.AllowGet);
    }

ИЛИ:

Добавьте конструктор без параметров в свой класс и метод, который принимает ваши параметры и делает некоторую логику. Используйте это так:

public class UnlockUser
{
     public UnlockUser()
     { }
     public <YourResultObject> <YourNewMethod> (string userId, string envId)
     {
          //Do some logic
          return <YourResultObject>;
     }
}

В методе вашего контроллера:

var foo = new UnlockUser();
foo.YourNewMethod(userId, envId);`
6
задан Don Kirkby 19 December 2008 в 00:42
поделиться

2 ответа

Хорошо, я нашел большую подсказку здесь от Anders Norås, что существует конструктор для конструктора CSharpCodeProvider, который выбирает некоторые варианты, включая версию компилятора. Когда я проверил документы MSDN, я нашел, что это более чисто для определения параметров компилятора в файле App.config. Вот пример:

<system.codedom>
  <compilers>
    <compiler
      language="vb;vbs;visualbasic;vbscript"
      extension=".vb"
      type="Microsoft.VisualBasic.VBCodeProvider, System, 
        Version=2.0.3600.0, Culture=neutral, 
        PublicKeyToken=b77a5c561934e089"
      compilerOptions="/optimize"
      warningLevel="1" >
      <providerOption
        name="CompilerVersion"
        value="v3.5" />
    </compiler>
    <compiler
      language="c#;cs;csharp"
      extension=".cs"
      type="Microsoft.CSharp.CSharpCodeProvider, System, 
        Version=2.0.3600.0, Culture=neutral, 
        PublicKeyToken=b77a5c561934e089"
      compilerOptions="/optimize"
      warningLevel="1" >
      <providerOption
        name="CompilerVersion"
        value="v3.5" />
    </compiler>
  </compilers>
</system.codedom>

Мое единственное разочарование состоит в том, что теперь я получаю две версии каждого компилятора от CodeDomProvider. GetAllCompilerInfo (). В документации по настройке говорится, что App.config должен переопределить machine.config настройки, но я получаю обоих. До сих пор App.config всегда после machine.config, таким образом, я просто позволяю более поздним переопределить более ранние. Кто-либо знает, как избежать дублирования?

8
ответ дан 8 December 2019 в 16:12
поделиться

Не уверенный, куда Вы идете с app.config's, но сюда - как можно сказать ему использовать 3,5 платформы.

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

http://blogs.msdn.com/lukeh/archive/2007/07/11/c-3-0-and-codedom.aspx

7
ответ дан 8 December 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: