大型程序的一个小功能检查文件夹中的程序集,并用最新版本替换过时的程序集.要实现此目的,它需要读取现有程序集文件的版本号,而不实际将这些程序集加载到执行过程中.
我在ASP.NET 3.5(AJAX)Web应用程序内的特定WebResource.axd调用上收到404 HTTP状态错误(未找到).我猜错误是因为bin文件夹/ GAC中缺少特定的引用程序集.但我不知道哪个,因为请求资源的页面非常复杂(我正在使用第三方控件和ASP.NET Ajax.)
是否可以从查询的加密"d"查询字符串参数中获知,如:
.../WebResource.axd?d=...
Run Code Online (Sandbox Code Playgroud)
哪个程序集应该创建内容并且可能丢失?
注意:还有其他WebRequest.axd调用成功执行.
如何在多个项目的AssemblyInfo.cs文件中更改程序集版本.我们的解决方案中有大约75个项目,我们几乎每周都需要更改版本.最快的方法是什么?
每次构建或发布网站时,Visual Studio都会尝试检出web.config文件,以便它可以添加许多不需要的程序集.
换一种说法:
web.config之前:
<configuration>
<system.web>
<compilation>
<assemblies>
</assemblies>
</compilation>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
web.config之后:
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="Microsoft.ReportViewer.Common... />
<add assembly="Microsoft.ReportViewer.WinForms... />
<add assembly="System.DirectoryServices... />
<add assembly="System.Windows.Forms... />
<add assembly="ADODB... />
<add assembly="System.Management... />
<add assembly="System.Data.OracleClient... />
<add assembly="Microsoft.Build.Utilities... />
<add assembly="Microsoft.ReportViewer.ProcessingObjectModel... />
<add assembly="System.Design... />
<add assembly="Microsoft.Build.Framework... />
</assemblies>
</compilation>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这些程序集都不是必需的,并且大多数程序集不存在于目标测试或生产服务器上.
我每次构建时都会一直删除它们,但它真的很快就会变得非常烦人.
现在我的解决方法是将web.config保持为只读 - 因此Visual Studio无法向其添加程序集.
截图作为证据:
项目属性页面之前:
链接文字http://i26.tinypic.com/206c46c.jpg
Web.Config之前:
alt text http://i31.tinypic.com/30rr728.jpg
项目属性页面后:
替代文字http://i27.tinypic.com/25a3z2x.jpg
Web.config之后:
我很好奇是否有办法在新进程中执行静态.DLL方法而不必为它创建.EXE?
AFAIK,本机Win32/64 DLL无法实现..NET DLL程序集怎么样?
更新:我忘了提到我主要感兴趣的是以编程方式执行此操作(来自C#代码,具体而言).
谢谢!
结论:虽然没有人"敢"拼出来,但答案似乎都倾向于"不".需要通过一种传统方式(EXE,PowerShell等)启动进程,然后说服进程加载DLL并执行其中的代码.我想我错误地希望托管的DLL能够提供更多功能.
再次感谢所有插话的人!
从3.0版开始,.NET在C:\ Program Files\Reference Assemblies\Microsoft ....下安装了许多不同的"引用程序集",以支持不同的配置文件(比如.NET 3.5客户端配置文件,Silverlight配置文件).其中每个都是一个正确的.NET程序集,只包含元数据 - 没有IL代码 - 每个程序集都标有ReferenceAssemblyAttribute.元数据仅限于适用的配置文件下可用的那些类型和成员 - 这就是intellisense显示一组受限制的类型和成员的方式.在运行时不使用引用程序集.
我从这篇博文中了解到了一些情况.
我想为我的库创建和使用这样的引用程序集.
任何想法或指示我可以了解更多关于这一点将不胜感激.
更新:环顾四周,我看到.NET 3.0'引用程序集'确实有一些代码,并且引用程序集属性仅在.NET 4.0中添加.因此,新运行时的行为可能会有所改变.
为什么?对于我的Excel-DNA(http://exceldna.codeplex.com)加载项库,我通过将引用的程序集作为资源打包到.xll文件中来创建单文件.xll加载项.打包的程序集包括用户的加载项代码,以及Excel-DNA托管库(可能由用户的程序集引用).
这听起来相当复杂,但大部分时间都运行良好 - 加载项是一个小文件,所以没有安装分发问题.由于版本不同,我遇到(并非意外)问题 - 如果Excel-DNA托管库的旧版本作为文件,运行时将加载而不是打包的(我永远不会有机会干扰加载).
我希望为我的Excel-DNA管理部分制作一个参考程序集,用户在编译它们的加载项时可以指向它.但是如果他们在运行时错误地拥有了这个程序集的一个版本,那么运行时应该无法加载它,并让我有机会从资源加载真正的程序集.
使用反射,我需要加载同一组件的2个不同版本.我可以在同一个进程中在2个不同的AppDomain中加载2个版本吗?
我需要从旧版本的应用程序到新版本进行一些数据迁移.如果可能,请告诉我,或者我应该使用2个单独的流程.
我在assemblyinfo.cs类中有代码:
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
Run Code Online (Sandbox Code Playgroud)
调用System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()工作正常并提供更新版本,但是,当我在Windows资源管理器中查看生成的dll时,右键单击属性,单击"详细信息"选项卡,fileversion显示"1.0.0.0",即使上面的输出显示为1.0.3489.17621 ?
我有一个网站项目,我使用内置的开发Web服务器从Visual Studio运行.网站的虚拟路径设置为/
web.config包含一个运行时元素
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="CMS.Controls" publicKeyToken="834b12a258f213f9" culture="neutral" />
<bindingRedirect oldVersion="4.1.3518.21577" newVersion="4.1.3561.21846" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
我已经xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"从根configuration元素中删除了该属性.
这是错误:
无法加载文件或程序集'CMS.Controls,Version = 4.1.3518.21577,Culture = neutral,PublicKeyToken = 834b12a258f213f9'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
这是绑定的日志:
The operation failed.
Bind result: hr = 0x80131040. No description available.
...
LOG: DisplayName = CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9
(Fully-specified)
...
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\Project\WebSite\web.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: CMS.Controls, …Run Code Online (Sandbox Code Playgroud) assemblies ×10
.net ×7
c# ×4
asp.net ×2
dependencies ×1
dll ×1
reflection ×1
versioning ×1
versions ×1
web-config ×1