Контекста: В нашем приложении есть два отдельных библиотек DLL, которые хранилища переменных, сконфигурированные для различных типов аппаратных .Эти библиотек DLL имеет такое же имя и ссылки из нашего приложения, Теперь каждый раз, если мы хотим протестировать различный тип оборудования, мы должны скопировать соответствующую dll в место, где работает приложение. Я ищу обходной путь.несколько путей подсказки в csproj файл из текстового файл переменной
Ссылки: Я видел следующие темы,
1) .csproj multiple hint paths for an assembly
Вопрос: Могу ли я объявить переменную в текстовом файле говорят <hardware> type1 </hardware>
и импортируйте этот текстовый файл в файл csproj и назначьте соответствующий refe к моей заявке?
Любая помощь ..
Ниже тестовое приложение, которое дублирует наш проект. SignalPool1, SignalPool2 имеют одно и то же имя класса и являются хранилищами для двух разных конфигураций оборудования, доступных в двух разных местах нашего проекта. Если бы мы захотели протестировать аппаратное обеспечение1, мы удалили бы текущую ссылку и добавили бы ссылку пула сигналов, которая имеет отношение к тому же, что и для hardware2. Теперь, чтобы избежать этой ручной работы, я хотел автоматизировать этот процесс, чтобы объявить переменную в XML и получить доступ к переменной в файле csproj, чтобы решить, к кому обратиться во время компиляции/выполнения.
В настоящее время во избежание этой проблемы у меня есть отдельный exe, который читает xml и решает скопировать их в одну общую папку. Этот exe будет вызываться во время события prebuild в нашем проекте.
// Сигнал бассейн 1 Файл
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SignalPool
{
public abstract class SignalPool
{
public abstract string PreExec();
public abstract string PostExec();
public abstract string VnVExec();
public static string HWVar1 = "HWVar1";
public static string HWVar2 = "HWVar2";
public static string HWVar3 = "HWVar3";
public static string HWVar4 = "HWVar4";
}
}
// Сигнал pool2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SignalPool
{
public abstract class SignalPool
{
public abstract string PreExec();
public abstract string PostExec();
public abstract string VnVExec();
public static string HWVar1 = "HWVar5";
public static string HWVar2 = "HWVar6";
public static string HWVar3 = "HWVar7";
public static string HWVar4 = "HWVar8";
}
}
// Доступ к бассейн Переменные
главного файла
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
namespace TestLibraries
{
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Testhardware th = new Testhardware();
th.functionToValues();
}
private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name.Contains("SignalPool")) //Put in the name of your assembly
{
//var configValue = XDocument.Parse("<config><hardware>type1</hardware></config>").Document.Descendants("hardware").First().Value;
var configValue = XDocument.Load(@"C:\Users\ha23031\Documents\Visual Studio 2010\Projects\TestLibraries\TestLibraries\TestInfo.xml").Document.Descendants("IsRealHMI").First().Value;
if (configValue == "false")
{
return System.Reflection.Assembly.LoadFile(@"C:\Users\ha23031\Documents\Visual Studio 2010\Projects\TestLibraries\SignalPool\bin\Debug\SignalPool.dll");
}
else if (configValue == "true")
{
return System.Reflection.Assembly.LoadFile(@"C:\Users\ha23031\Documents\Visual Studio 2010\Projects\SignalPool\bin\Debug\SignalPool.dll");
}
}
return null;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestLibraries
{
class Testhardware : SignalPool.SignalPool
{
public override string PostExec()
{
return string.Empty;
}
public override string PreExec()
{
return string.Empty;
}
public override string VnVExec()
{
return string.Empty;
}
public string functionToValues()
{
// This is how i access variables based on the loaded variables
string s = SignalPool.SignalPool.HWVar1;
return string.Empty;
}
}
}
Вы поднимаетесь в ту гору. Попробуйте вернуться к [Шаблон стратегии] (http://programmers.stackexchange.com/questions/285276/design-pattern-dll-per-strategy). –
@TomBlodget, спасибо за ответ, я думаю, что я не сделал свое ясное. эти две DLL с одинаковым именем не являются частью нашего цикла разработки, которые поставляются нам двумя (аппаратными средствами типа 1, аппаратными средствами типа 2) различными командами. – ansar
Для получения реального ответа вам необходимо определить свой * тест *. Запускает ли ваше приложение в отладчике или вы проводите тесты с ним? Ответ может быть таким же простым, как определение двух конфигураций сборки и установка соответствующих условий для вашей справки. – Filburt