我正在使用XmlSerializer来反序列化mscorelib.dll中的特定类型
XmlSerializer ser = new XmlSerializer( typeof( [.Net type in System] ) );
return ([.Net type in System]) ser.Deserialize( new StringReader( xmlValue ) );
Run Code Online (Sandbox Code Playgroud)
这会FileNotFoundException在加载程序集时抛出一个catch :
"无法加载文件或程序集'mscorlib.XmlSerializers,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其中一个依赖项.系统找不到指定的文件."
FusionLog:
=== Pre-bind state information ===
LOG: User = ###
LOG: DisplayName = mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
(Fully-specified)
LOG: Appbase = file:///C:/localdir
LOG: Initial PrivatePath = NULL
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: …Run Code Online (Sandbox Code Playgroud) 我刚刚完成了一个Silverlight项目,现在是时候进行一些清理了.我想把我的核心文件放到一个单独的项目中,我将从我的主要Silverlight应用程序中引用它.其中一些类与WPF兼容,我非常希望能够在一个项目中拥有Silverlight/WPF代码.我理想的解决方案是允许多种配置的单个项目.所以,
配置:Silverlight将生成:Company.Controls.Silverlight.dll
配置:WPF将生成:Company.Controls.Wpf.dll
是否可以在同一个文件中通过定义分隔相同的源?
有没有人这样做过?
编辑:我为每个项目创建了一个解决方案,比如MyCompany.Windows.Controls,然后包含2个项目,MyCompany.Windows.Controls和MyCompany.Windows.Controls.Silverlight.除了这两个文件夹,我还有一个"共享"文件夹,其中包含两个项目使用的文件.到目前为止它运作良好:)
如何在编译后读取.csproj中的AssemblyFileVersion或其组件AssemblyFileMajorVersion,AssemblyFileMinorVersion,AssemblyFileBuildNumber,AssemblyFileRevision?
我尝试了以下从构建的程序集中提取信息:
<Target Name="AfterCompile">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output
TaskParameter="Assemblies"
ItemName="MyAssemblyIdentities"/>
</GetAssemblyIdentity>
<Message Text="AssemblyVersion = %(MyAssemblyIdentities.Version)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
但是,它检索AssemblyVersion而不是AssemblyFileVersion.对于后者,似乎没有记录的元数据条目.我也尝试过:
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks" />
<Target Name="AfterCompile">
<MSBuild.ExtensionPack.Framework.Assembly TaskAction="GetInfo" NetAssembly="$(TargetPath)">
<Output TaskParameter="OutputItems" ItemName="Info" />
</MSBuild.ExtensionPack.Framework.Assembly>
<Message Text="AssemblyFileVersion = %(Info.FileVersion)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
不幸的是,虽然这会检索正确的值,但它也会锁定程序集,直到VS2008关闭.
坦率地说,我不想要什么,因为我宁愿直接从AssemblyInfo.cs读取信息.但是,我无法弄清楚如何做到这一点.我假设MSBuild Extensions中的AssemblyInfo是一种方式,但它似乎专注于写入AssemblyInfo而不是从中检索值.
我怎样才能最好地完成这个?
我已将以下内容添加到注册表项Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion:
如果我从Visual Studio启动ASP.NET网站,它会抛出一个Parser错误:
无法加载文件或程序集'CMS.Controls,Version = 4.1.3518.21577,Culture = neutral,PublicKeyToken = 834b12a258f213f9'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
现在,如果我刷新或重新启动Assembly Binding Log Viewer,它就是空的.它不应该记录这个错误吗?
只有当我将DWORD ForceLog 1添加到注册表时,它才会记录错误.但是日志也填满了所有成功的绑定,并且由于它没有按名称排序,因此很难在列表中找到错误.
谢谢!
我有两个库和一个应用程序集程序项目布局,我想知道如何通过其中一个我在另一个库中定义的库中的键来引用样式.
我的解决方案布局
我已经看到一些示例解释如何使用简单的单个控件库和应用程序组件来执行此操作,但在我的情况下,我有两个程序集和一个应用程序.所以换句话说在我的情况下,我的第二个控件库中没有App.xaml,我可以使用MergeDictionaries概念.我很确定我是否可以直接在每个控件XAML文件中放置一个MergedDictionaries引用来合并WpfControls.dll程序集中定义的所有Generic.xaml但我的猜测是这会导致样式被冗余地合并到各个地方在我的SpecializedControls程序集中,这似乎不是最好的解决方案.更糟糕的是,这些词典也可能合并到Application.exe中,这会在运行时开始膨胀我的应用程序吗?
任何人都可以用最少的编程和资源开销来澄清分享这些样式的推荐或最佳方法.
更新:经过一些测试后,即使在同一个程序集中,我也无法通过它的密钥引用Generic.xaml中定义的任何资源.关于我如何理解资源键的工作方式可能存在一些完全错误,所以我需要进行更多的研究以及调查ComponentResourceKey.如果有人有任何提示或建议,请帮助.
我有一个项目,即library.exe.在这里我引用了一个程序集(版本logging.dll1.0.3.0),并且我给了这个程序集一个强名称.
现在假设我更改了一个方法logging.dll并制作了1.0.4.0版本.
现在,当我用这个新DLL复制/替换旧DLL时,我得到了一个例外.我知道异常是因为我已经更改了DLL的版本号.因为它是一个强大的名称DLL,除非我重建,否则不允许这样做library.exe.
我想用上面的故事说的是
我对第1点和第2点是否正确?
何时应该使用强名称程序集?
"强名命组装"有哪些缺点?
我想更新生产Web应用程序中的类库(单个DLL文件).此Web应用程序已预编译(已发布).我在StackOverflow上读了一个答案(抱歉,似乎无法找到它,因为搜索功能不能很好地工作),这让我相信我可以将新的DLL粘贴到bin文件夹中并且它会被选中没有问题(这会导致WP回收,这对我来说很好,因为我们不使用InProc会话状态).
但是,当我尝试这个时,我的网站爆炸并提供一个FileLoadException,说明程序集清单定义与程序集引用不匹配.这个世界到底是什么?!在Visual Studio中更新DLL并重新部署整个站点工作得很好,但后面是一个巨大的痛苦.如果必须重新部署整个站点以实现任何更改,那么拥有单独的DLL有什么意义呢?
这是一个问题:如何在不破坏应用程序且不重新部署所有文件的情况下更新生产网站上的DLL?
我的一位同事在VB.net中创建了一个程序集,用于通过COM互操作与JScript一起使用.组件过去工作正常,但我们签了它,现在它似乎只适用于Windows 7机器.我测试了2台Windows 7机器和2台Windows Vista机器.
当我们签署程序集并尝试在JScript中实例化ActiveX对象时,将返回一个错误,但没有消息,只有一个数字:
错误:
错误号:-2146234304
在Google上搜索错误编号并没有太多回复.
如果我们从程序集中删除强名称,它就可以正常工作.关于什么可能是问题的任何想法?不确定它是否有所作为,但正在使用VS 2010编译和签署程序集.
我熟悉.Net以及哪些程序集 - 但遗憾的是我的Java知识并不那么强大.
我知道Java和.Net是不同的"世界"(可能比如苹果与梨的比较)但是JAR和.Net Assemblies大致是等价的概念吗?
编辑:根据初始响应进行更新
我解释这个的方式是,他们有相似之处:
但是有一些核心差异:
[这不是宗教战争的时候 - 我想知道我对.Net程序集的理解是否/我有多少可以应用于了解Java(也许这甚至可以帮助Java人员走另一条路) ).]
目前我可以想到三个案例:
我是否对这些案件是正确的,还有其他我现在看不到的情况吗?
assemblies ×10
.net ×5
c# ×3
asp.net ×2
wpf ×2
architecture ×1
com-interop ×1
deployment ×1
fusion ×1
jar ×1
java ×1
javascript ×1
msbuild ×1
reference ×1
resources ×1
silverlight ×1
strongname ×1
styles ×1
versioning ×1