没有版本 visual studio 2015 的参考 dll
Reference dll without version visual studio 2015
我有一个应用程序正在引用一个 dll,该 dll 将不断更改为更新版本(具有向后兼容性)。
我的应用程序(内置于 visual studio 2015)将适用于任何版本 - 问题是 - 我需要在不指定版本的情况下引用 dll,因为最新版本的 dll 将不断替换我的 dll项目(办公要求),我不想每次更新dll都重新编译我的项目
我尝试了以下方法:
在我的 .csproj 文件中设置 <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
AppDomain.CurrentDomain.AssemblyResolve += delegate (object s, ResolveEventArgs re)
{
AssemblyName theName = new AssemblyName(re.Name);
if (theName.Name == "name, version, key")
{
return Assembly.LoadFile("name without version");
}
return null;
};
我不太确定把我试过的第二个东西放在哪里,但似乎没有任何效果!!
以一种方式解决了它 - 但我仍在寻找更好的答案 -
我通过加载我的 dll
从程序集中创建了一个 class
喜欢 -
Assembly assemblyInstance=Assembly.Load(dll);
Type[] asseblyTypes=assemblyInstance.GetTypes();
foreach(Type t in asseblyTypes)
{
if(t.fullName.Equals(name of class i want))
{
try to get the method info by t.GetMethod(name,type of parameter)
and then do methodInfo.Invoke...
}
}
有效...但我喜欢更好的答案
更简洁的方法是使用 AssemblyResolve 事件 -
类似于以下内容:
AppDomain.CurrentDomain.AssemblyResolve += (sender, argsAssembly) =>
{
if (argsAssembly.Name.StartsWith the name of your dll)
return Assembly.Load(load the dll);
return null;
};
我有一个应用程序正在引用一个 dll,该 dll 将不断更改为更新版本(具有向后兼容性)。
我的应用程序(内置于 visual studio 2015)将适用于任何版本 - 问题是 - 我需要在不指定版本的情况下引用 dll,因为最新版本的 dll 将不断替换我的 dll项目(办公要求),我不想每次更新dll都重新编译我的项目
我尝试了以下方法:
在我的 .csproj 文件中设置
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
AppDomain.CurrentDomain.AssemblyResolve += delegate (object s, ResolveEventArgs re) { AssemblyName theName = new AssemblyName(re.Name); if (theName.Name == "name, version, key") { return Assembly.LoadFile("name without version"); } return null; };
我不太确定把我试过的第二个东西放在哪里,但似乎没有任何效果!!
以一种方式解决了它 - 但我仍在寻找更好的答案 -
我通过加载我的 dll
从程序集中创建了一个 class喜欢 -
Assembly assemblyInstance=Assembly.Load(dll);
Type[] asseblyTypes=assemblyInstance.GetTypes();
foreach(Type t in asseblyTypes)
{
if(t.fullName.Equals(name of class i want))
{
try to get the method info by t.GetMethod(name,type of parameter)
and then do methodInfo.Invoke...
}
}
有效...但我喜欢更好的答案
更简洁的方法是使用 AssemblyResolve 事件 -
类似于以下内容:
AppDomain.CurrentDomain.AssemblyResolve += (sender, argsAssembly) =>
{
if (argsAssembly.Name.StartsWith the name of your dll)
return Assembly.Load(load the dll);
return null;
};