#c# #.net #resx
Вопрос:
Итак, у меня есть два проекта: Тестировщик и программист. Я добавил Кодер.dll в моем проекте тестера в качестве ссылки проблема в том, что оба этих проекта имеют свои собственные файлы SetUp.resx для установки, и по какой-то причине проект тестера использует файл «SetUp.resx» Кодера вместо собственного файла SetUp.resx.
Coder has a string Name "browser" whose values are "Chrome, Firefox" Tester has a string Name "browser" whose value is "Chrome"
Как показано выше, Значение «Браузер» используется для выполнения тестов, поэтому в Coder будет два тестовых случая, т. е. «Chrome и firefox». И в тестере должен быть только один тест, т. е. Chrome, но он все равно показывает 2 теста (Chrome и Firefox), которые показывают, что он берет SetUp.resx из Coder.dll
Вот как выглядит файл SetUp.resx в тестере
Name | Value |Comments Browser | Chrome |Browser to be tested with separated by Comma BuildNumber| v2.1 |aka version
Это то, что я сделал для SetUp.Designer.cs в тестере
private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal SetUp() { } /// lt;summarygt; /// Returns the cached ResourceManager instance used by this class. /// lt;/summarygt; [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TestProject3.Configurations.SetUp", typeof(SetUp).Assembly); //Path of Tester's SetUp.resx resourceMan = temp; } return resourceMan; } } /// lt;summarygt; /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// lt;/summarygt; [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static string BuildNumber { get { return ResourceManager.GetString("BuildNumber", resourceCulture); } } internal static string Browser { //Gets string value for Browser in SetUp.resx get { return ResourceManager.GetString("Browser", resourceCulture); } } }
Это код для функции, обращающейся к resx
internal static IEnumerable Browsers() { get { String[] browser = Configurations.SetUp.Browser.Split(","); foreach (string b in browser) { yield return b; } } }
Не мог бы кто-нибудь, пожалуйста, сказать мне, где я ошибся и что следует изменить в моем коде?
Комментарии:
1. Почему бы не сделать файл ресурсов общим для 2 проектов?
2. @AliK как мне это сделать?
3. Поместите свой resx в свой собственный проект, и таким образом у вас будет один проект для всех resx.
Ответ №1:
Я попытался найти способ, который использует путь к файлу ресурса, чтобы тестер не путался с resx кодера.
internal static IEnumerable Browsers() { var enviroment = System.Environment.CurrentDirectory; string resxFile = Directory.GetParent(enviroment).Parent.Parent.FullName @"ConfigurationsSetUp.resx"; String[] browser; IDictionaryEnumerator dict; string key; using (ResXResourceSet resSet = new ResXResourceSet(resxFile)) { dict = resSet.GetEnumerator(); while (dict.MoveNext()) { key = (string)dict.Key; // Retrieve resource by name. if (dict.Key is "Browser") { browser = resSet.GetString(key).Split(","); foreach (string b in browser) { yield return b; } } } } }