#c# #scripting
#c# #сценарии
Вопрос:
Я пытаюсь создать сценарий с Microsoft.CodeAnalysis.CSharp.Scripting
помощью . Как только я добавлю List<>
код ошибок. Я думал, что у меня были включены все необходимые ссылки и способы использования, однако в нем по-прежнему указаны ошибки The type or namespace name 'List<>' could not be found (are you missing a using directive or an assembly reference?
Это мои варианты использования в коде
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Diagnostics;
Ниже приведен мой пример модульного теста
[TestMethod]
public void RunGenericListTest()
{
var code = @"
List<string> strings = new List<string>();
strings.Add(""test string"");
return output;";
var options = ScriptOptions.Defau<
options.WithReferences(typeof(System.Collections.CollectionBase).Assembly);
options.WithReferences(typeof(System.Collections.Generic.List<>).Assembly);
options.WithImports("System.Collections");
options.WithImports("System.Collections.Generic");
var result = CSharpScript.RunAsync(code, options).Resu<
Debug.WriteLine(result);
}
Это приводит к ошибкам CSharpScript.RunAsync
каждый раз. Может кто-нибудь просветить меня о том, чего мне не хватает?
Комментарии:
1. Честная игра для включения модульного теста. Приятно видеть вопросы с минимальными, воспроизводимыми примерами.
Ответ №1:
Я думаю, проблема в том, WithImports
что не изменяет параметры, а скорее возвращает копию
var code = @"
List<string> strings = new List<string>();
strings.Add(""test string"");
return strings;";
var options = ScriptOptions.Default
.WithImports("System.Collections.Generic"); // chaining methods would work better here.
// alternatively reassign the variable:
// options = options.WithImports("System.Collections.Generic");
var result = CSharpScript.RunAsync(code, options).Resu<
Debug.WriteLine((result.ReturnValue as List<string>).First());
Комментарии:
1. Итак, это синтаксическая ошибка. Я не понимал, что объект
options
не будет добавлен, если вы не переназначите его самому себе.returns a copy
Ссылка была немного сложной для понимания изначально, но также была полезной. Спасибо2. @Thundter Мне жаль, что я не смог найти этот класс в документации. Пришлось обратиться к источнику