Ну, при использовании суда, можно просто записать целое число непосредственно в него, как в
std::cout << text << i;
C++, который способ преобразовать все виды объектов к строкам до строковые потоки . Если у Вас нет одного удобного, просто создайте тот.
#include
std::ostringstream oss;
oss << text << i;
std::cout << oss.str();
, С другой стороны, можно просто преобразовать целое число и добавить его к строке.
oss << i;
text += oss.str();
Наконец, библиотеки Boost обеспечивают boost::lexical_cast
, который переносит stringstream преобразование с синтаксисом как встроенные броски типа.
#include
text += boost::lexical_cast(i);
Это также работает наоборот, т.е. проанализировать строки.
Помимо отличного совета Джонатана Аллена, более «классический» способ решения проблемы - это загрузка 2 версий в 2 разных AppDomanis. Затем вы можете использовать .NET Remoting, чтобы установить связь между двумя доменами приложений. Итак, ZA должен создать новый Appdomain, Load в этом AppDomain ZB и вызвать некоторую операцию в ZB через Remoting.
Обратите внимание, что .NET Remoting предъявляет некоторые требования к классам, которые вы хотите использовать (наследование от MarshalByRef), и создание Домен приложений - дорогостоящая операция.
Надеюсь на помощь
m_Assembly1 = Reflection.Assembly.LoadFile(IO.Path.Combine(System.Environment.CurrentDirectory, "Old Version\Some.dll"))
m_Assembly2 = Reflection.Assembly.LoadFile(IO.Path.Combine(System.Environment.CurrentDirectory, "New Version\Some.dll"))
Console.WriteLine("Old Version: " & m_Assembly1.GetName.Version.ToString)
Console.WriteLine("New Version: " & m_Assembly2.GetName.Version.ToString)
m_OldObject = m_Assembly1.CreateInstance("FullClassName")
m_NewObject = m_Assembly2.CreateInstance("FullClassName")
С этого момента я использовал позднее связывание и / или отражение для запуска моих тестов.
У меня было две версии одной сборки, загруженные одновременно. Это произошло по сценарию, как вы описали.
Вам нужно убедить среду выполнения загрузить одну и ту же версию ZC для ZA и ZB. Я нашел два способа сделать это:
bindingRedirect
в вашем файле App.config. Некоторые подробности есть в этом вопросе. AppDomain.AssemblyResolve
. Некоторые подробности есть в этом ответе. Единственная проблема с AppDomain.AssemblyResolve
заключается в том, что оно срабатывает только тогда, когда среда выполнения не может найти запрашиваемую версию. Если обе версии доступны, то вам придется использовать bindingRedirect
. Я использовал событие AppDomain.AssemblyResolve
, а затем добавил проверку безопасности, которая проверяет, что была загружена правильная версия, просматривая коллекцию ссылающихся сборок сборки. Если это не так, я сообщаю пользователю, что где-то лежит старая версия библиотеки, и говорю, где она находится.