标签: assemblies

版本号是1.13> 1.2?

我从.NET的角度知道,版本为1.13的程序集被认为是比版本1.2更新的版本,因为版本中的每个数字都是单独计算的.然而,从数值的角度来看,1.13 <1.2.

问题归结为为客户发布更新时的可读性.从.0到.9它们都是一样的,但是在.10你必须区分.那么,你是否将点数发布的数量限制为9,然后在达到.9时增加主要版本?

请不要认为最终用户了解典型的开发版本编号方案.

更新:

不要把它想象成十进制数.(.)是不同字段之间的分隔符.每个字段的含义(例如):

 MajorRelease.MinorRelease.BuildNumber
Run Code Online (Sandbox Code Playgroud)

绝对!当我查看版本号时,我看到了它.但这不是你的普通乔读取文字"1.13"的方式.我想作为程序员,很容易将我们的理解投射到我们的用户身上.这就是为什么我对数字混淆经验的回应感兴趣.这可能不是一个真正的问题,或者它可能只是被忽略了.

更新2:响应"提供文档"或"向用户解释"类型的解决方案:它们不起作用!:)如果你必须向用户解释版本号,你已经使它变得比它需要的更复杂.虽然一项技术的主要受众可能是许多公司的开发人员,但软件的实际采购和管理由没有开发或技术背景的秘书和文职人员处理.如果他们的经理问他们"是否有可用的新版本1.9"并且他们看到"1.11"他们可能不会将其注册为新版本.

.net versioning assemblies

17
推荐指数
5
解决办法
2532
查看次数

在ReflectionOnlyLoad期间忽略缺少的依赖项

我正在开发一个简单的类浏览器对话框,允许用户打开一个程序集并从内部选择一个静态方法.但是,在某些情况下会缺少程序集的依赖项.

因为我只需要方法名而不是它的完整原型,有没有办法通过调用Assembly.ReflectionOnlyLoadFrom时引发的FileNotFoundException ?我目前正在处理AppDomain.ReflectionOnlyAssemblyResolve但是如果我返回null,那么我得到一个FileLoadException并带有以下消息:

无法解析对程序集"..."的依赖性,因为它尚未预加载.使用ReflectionOnly API时,必须通过ReflectionOnlyAssemblyResolve事件按需预加载或加载相关的程序集.

我知道这一定是可能的,因为.NET Reflector允许您跳过未解析的依赖项.但是我开始认为,Reflector可能会手动解析程序集,而不是将其加载到CLR中并使用标准反射.也许它使用Mono项目中的Cecil之类的东西.

.net c# reflection clr assemblies

17
推荐指数
1
解决办法
7751
查看次数

.NET程序集加载优先级

我有一个包含3个项目(GUI,BL和DAL)的解决方案.DAL程序集已在GAC中签名和部署.

当我构建解决方案时,编译DAL并将程序集放在主项目的bin文件夹中.但是当我运行应用程序时,它会加载GAC版本而不是本地版本.为什么是这样?

我意识到,因为GAC中的版本不是最新版本,并且有些方法丢失了,尽管编译得很好.

GAC是否优先于本地bin文件夹?

事先提前

.net assemblies gac

17
推荐指数
2
解决办法
6828
查看次数

基于GAC内容设置的.NET参考"复制本地"真/假

我们在Win Forms项目中遇到了一个非常有趣的问题.它已经解决了.我们知道发生了什么,但我们想知道它为什么会发生.这可能有助于将来遇到类似问题的其他人.

WinForms项目在我们客户的两台PC上失败了.该错误是一个模糊的kernel.dll错误.该项目在另外3台PC上运行良好.

我们发现我们的发布文件夹中缺少.DLL(log4net.dll - 一个非常流行的开源日志库).它以前在我们的发布文件夹中.为什么在最新版本中缺少它?

它丢失了,因为我必须在我的开发盒上安装了一个程序,该程序使用了log4net.dll,并将其添加到全局程序集缓存中.

当我检查解决方案对log4net.dll的引用时,它们被更改为"copy local = FALSE".它们必须自动更改,因为我的GAC中存在log4net.dll.

这是我的问题开始的地方:

为什么我对log4net.dll的引用从COPY LOCAL = TRUE更改为COPY LOCAL = FALSE?我怀疑是因为它是由另一个程序添加到我的GAC中的.

我们怎样才能防止这种情况再次发生?现在,如果我安装一个使用公共库的软件并将其添加到我的GAC,那么引用该DLL的我的SLN将从Copy Local TRUE更改为FALSE.

.net log4net assemblies gac reference

17
推荐指数
1
解决办法
2万
查看次数

加载同一程序集的多个版本

我正在使用第三方程序集,不幸的是我现在需要将他们的最新版本和以前的版本加载到我的项目中,所以在运行时我可以决定加载哪一个.我只需要一个,而不是两个.

考虑到这一点,我也依赖于组件提供的类型,因此我不能每次为我想要使用的方法/事件/接口从反射和查询加载.我已经看到一些提到通过AppDomains 处理这个,但我不知道如何继续.

该过程是针对组件的一个版本进行编码,然后在运行时(使用AppDomain)交换我想要使用的正确DLL吗?所以我只会在启动时处理这个问题?

c# assemblies appdomain multiple-versions

17
推荐指数
3
解决办法
4万
查看次数

为什么构建在Visual Studio中失败,因为它无法从引用的程序集中解析名称空间?

我有3个类库项目.让我们称他们为A,B和C.我已将project referenceA和B 添加到项目C中.

A&B正在建设中,没有任何错误或警告.

项目C中的代码(类文件)使用A和B中的公共类.当我在C中添加项目引用并查看C项目中的类文件(在构建项目C之前)时,我可以清楚地看到所有类和来自A和B的名称空间已解析.当我将鼠标悬停在类名(A或B中的类)上时,它也会显示它的正确名称空间.

我已经在项目引用上设置了Copy Local属性True.

然而,

  1. 当我运行Rebuild All(或在项目C上构建)时,构建失败,因为它无法解析命名空间!我可以进一步检查以确保一切正确完成?
  2. 我从来没有发现A&B的程序集被复制到bin\debug项目C 的文件夹中.为什么不复制引用?(我已经看到了关于这个问题的几个问题,但没有提供给他们的解决方案对我有用)

.net assemblies project-reference visual-studio-2010 visual-studio

17
推荐指数
2
解决办法
7713
查看次数

是否可以用"弱"引用替换对具有强名称的程序集的引用?

我正在编写一个需要SQL Server SMO库的.NET工具.我不在乎它是Server 2005(9.0),2008(10.0)还是2008 R2(可能是10.5,没有检查)的版本.SMO库与SQL Server一起安装,因此我可以放心地假设在安装了SQL Server的任何系统上,也可以使用某些版本的SMO库.

不幸的是,SMO库名称很大:如果我在项目中添加对SMO 9.0的引用,FileNotFoundException如果客户系统上只有SMO 10.0 ,则会失败(),反之亦然.

有没有办法告诉编译器任何版本的库对我来说都没问题?或者我是否真的必须分发3个相同版本的工具,每个版本都编译为不同版本的SMO?


免责声明:我知道可以重新分发SMO库(以及SMO库所需的库).但是(a)一个超薄的100KB独立EXE和(b)安装了大量先决条件的完整安装包之间存在很大差异.

免责声明2:我知道以下重复:

但是,所提供的解决方案并不合适.在问题1中,开发人员可以控制引用的DLL(我没有); 在问题2中,开发人员可以控制目标系统(我也没有).

.net strongname assemblies reference

17
推荐指数
2
解决办法
4976
查看次数

多次调用Assembly.Load的副作用

如果Assembly.Load多次呼叫会导致任何副作用吗?

例如

for (int i = 0; i < N; i++) 
{
   Assembly.Load(assemblyStrongName);
   // .......
}
Run Code Online (Sandbox Code Playgroud)

这一次装载组件不是吗?我已经检查过AppDomain.CurrentDomain.GetAssemblies()之前和之后它似乎已经加载一次(应该如此)但是它有副作用吗?

在长时间运行的服务器应用程序(运行数月/年而不重启)上面是否会导致任何问题?

.net c# load assemblies

17
推荐指数
1
解决办法
4565
查看次数

在"System.IO.Compression"命名空间中找不到`ZipArchive`

我的问题与我在"System.IO.Compression"命名空间中找不到"ZipFile"类有关

在此输入图像描述

但我已经为我的4.5.1 webforms项目引用了DLL:

在此输入图像描述

我项目的属性给了我:Target framework: .Net Framework 4.5.1. 和web.config:

<compilation debug="true" targetFramework="4.5" />
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

解决方案是手动引用web.config中的程序集但为什么呢?为什么添加引用对话框中的复选框不足?

<assemblies>
    <add assembly="System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    <add assembly="System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
Run Code Online (Sandbox Code Playgroud)

/sf/answers/1406996531/

c# assemblies reference .net-4.5

17
推荐指数
2
解决办法
2万
查看次数

为什么我的Xamarin PCL在为Universal App构建版本时会抛出运行时异常?

我有一个xamarin PCL,可以在x86调试模式下构建.当我将其切换到发布模式(x86或x64)或x64调试时,我得到运行时异常.它可能与...有关

https://forums.xamarin.com/discussion/57810/issue-with-xamarin-forms-in-windows-uwp-app-compiled-in-the-release-mode

但我不知道我正在使用的其他组件.我该怎么说?

我的电脑是x64.当我在调试或发布中运行x64时,我得到了

MyApp.Interop.dll中的"System.NotImplementedException"异常.附加信息Arg_NotImplementedException.

在进入构造函数App()之前.对构造函数的调用如下:

LoadApplication(new MyApp.App());
Run Code Online (Sandbox Code Playgroud)

当我构建x86时,我会更进一步.它进入MyAppConstructor并调用xaml构造函数并给出异常:

System.Private.Reflection.Core.dll AdditionalInfo中的System.Reflection.MissingMetadataException:Arg_InvokeMethodMissingMetadata,System.EventHandler.有关详细信息,请访问http://go.microsoft.com/fwlink/?LinkId=623485

所以它看起来像我缺少的Xaml程序集.如何找出我需要添加的程序集?

我把它放回Debug,但把它转为"使用Native Compiler",这样我就可以获得有关异常的更多细节:

x86:附加信息:无法在类型"System.EventHandler"上创建委托,因为它缺少Invoke方法的元数据.有关详细信息,请访问http://go.microsoft.com/fwlink/?LinkID=616867

x64:Xamarin.Forms.Platform.UAP.dll中出现"System.NotImplementedException"类型的异常,但未在用户代码中处理

附加信息:未实现方法或操作.

更新:我猜Xamain不支持x64,因为没有移动产品有x64处理器?仍然留下了x86版本的问题.我尝试在Universal App.xaml.cs中添加以下程序集

  List<Assembly> assembliesToInclude = new List<Assembly>();
  assembliesToInclude.Add(typeof(MyApp.MyAppMainPage).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.ImageSource).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.StackLayout).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Label).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Button).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.FormattedString).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Span).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Image).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.ScrollView).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.WebView).GetTypeInfo().Assembly);
  // add this line
  Xamarin.Forms.Forms.Init(e,assembliesToInclude); // requires the `e` parameter
Run Code Online (Sandbox Code Playgroud)

其中MyAppMainPage是xaml页面,我尝试在我的PCL中加载,其余的是页面由UI组成的元素.

我现在看到为x86抛出此异常:

System.Private.Interop.dll中出现'System.PlatformNotSupportedException'异常抛出:System.Private.Threading.dll中出现'System.AggregateException'异常抛出:System.Private.Reflection.Core.dll中的'System.Reflection.MissingMetadataException'

为什么不支持该平台?Xamarin支持环球权利吗?

c# assemblies release xamarin uwp

16
推荐指数
1
解决办法
4318
查看次数