Как запретить использование файла resx в моей библиотеке dll(ссылка) в моем основном проекте?

#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;  }   }  }  }  }