我构建了一个包含一个js文件的程序集.我将该文件标记为嵌入式资源,并将其添加到AssemblyInfo文件中.
我无法从网站上提及大会.它位于bin文件夹中,但我没有看到它的引用.
好像没有在程序集中至少有一个类我无法引用它.
我会将js文件从程序集中包含到我的页面中.
我该怎么做?
谢谢
我有一个由IIS中托管的WCF服务引用的程序集.程序集使用了一些XSLT文件,我很困惑在哪里转储这些文件要么在程序集项目本身或在WCF服务端创建文件夹,以及如何在程序集中获取xslt文件的物理路径?
哪个框架/ SDK /更新或任何东西安装这个DLL?
我们一直在尝试确定dll的来源,Silverlight 4,RIA Services,Silverlight 5 SDK被认为是嫌疑人,但显然他们都没有内疚.
简短的问题:是否可能(当然是在x64操作系统上)?如果不是,为什么呢?
我为excel 32开发了ac#plugin dll.
在x86中编译时,它工作正常.
在x64中编译时,COM调用失败.
我需要64位版本的Excel吗?
我认为COM不可能编译体系结构,并且可以在不同技术和不同体系结构中开发的dll之间进行通信,但我猜后者是错误的.
我猜一个x64位dll显然不能通过COM(或其他)从32位应用程序调用.
我想知道它是否尽可能,如果是这样 - 如何保存动态加载的.net程序集(它是从字节数组而不是文件加载)到磁盘上的文件(exe/dll取决于组件)和能够直接使用它(即,如果它是EXE,它包含所有exe头和可运或者至少是"可反射").
加载的程序集实际上也完全按照它们出现在文件中的方式存储在内存中,即所有PE EXE头文件,资源等,即内存中的exe/dll文件,或者它们以不同方式存储在内存中,因此它不会可以将一些内存区域保存为dll/exe .net程序集吗?也就是说,如果我可以使用图像中的类比:您可以将jpeg文件作为位图加载到内存中,其中表示内存中图像的实际字节将与表示jpeg文件的实际字节完全不同.加载组件也一样吗?
最后,我如何获得程序集实际位于进程内存中的内存地址(指针)?
只是为了澄清:我无法访问通过Assembly.Load()加载程序集的初始字节数组.
这是一个相关的问题,但是从答案中不清楚是否可能有一种方法将通过字节数组加载的程序集从内存转储到磁盘上的文件.
谢谢.
在我正在研究的项目中,我有两个类在单独的文件中.Windows专门构成类.当我尝试使用.cs文件中的一个类时,Visual Studio找不到它.它强调了代码行,并询问我是否缺少指令或程序集引用.我不知道为什么它没有看到其他类,因为两个.cs文件都在同一个目录中.有没有人有任何想法,为什么会发生这种情况以及如何解决它?
此外,其中一个.cs文件是从一个单独的项目中复制的,所以我不知道这是否会以某种方式引起问题.
我们为一个产品建立了相当大的C#代码库,该产品已分成许多程序集以避免单个产品并强制执行某些代码质量标准(特定于客户的功能包含在特定于客户的程序集中,以保持“核心”通用且不受限制)取决于客户特定的业务逻辑)。我们在内部将这些插件称为“插件”,但它们更多是构成整个产品的模块。
运作方式是将这些模块的DLL复制到目录中,然后应用程序运行时(ServiceStack IIS Web应用程序或基于Quartz的控制台应用程序)会对Assembly.LoadFile不在当前程序集列表中的每个模块执行一个操作。已加载(AppDomain.CurrentDomain.GetAssemblies())。
这PluginLoader只会加载plugins.config文件中存在的程序集,但是我认为这与手头的问题几乎没有关系。
PluginLoader该类的完整代码:
https://gist.github.com/JulianRooze/9f6d1b5e61c855579203
这个...。有点。但是它很脆弱,并且遇到一个问题,即程序集从不同的位置(通常是从应用程序的/ bin /文件夹和插件目录)以这种方式两次加载。发生这种情况似乎是因为在PluginLoader调用该类时,AppDomain.CurrentDomain.GetAssemblies()(在启动时)不一定返回程序将自行加载的程序集的最终列表。因此,如果/ bin /中有一个尚未被程序使用的名为dapper.dll的程序集(核心和许多插件/模块的共同依赖项),则该程序集尚未被加载(换句话说, :它会延迟加载它们)。然后,如果该dapper.dll也由插件提供,PluginLoader将会看到它尚未加载,并将对其进行加载。然后,当程序使用其Dapper依赖项时,它将从/ bin /加载dapper.dll,现在我们已经加载了两个dapper.dll。
在大多数情况下,这似乎很好。但是,我们使用RazorEngine库,该库在您尝试编译模板时会抱怨名称相同的重复程序集。
在对此进行调查时,我遇到了一个问题:
有没有一种方法可以强制将所有引用的程序集加载到应用程序域中?
我尝试了接受的答案和Jon Skeet的解决方案。可接受的答案有效(尽管我还没有验证是否有任何奇怪的行为),但是感觉很讨厌。一方面,这也使程序尝试加载恰好在/ bin /中的本机DLL,这显然会失败,因为它们不是.NET程序集。因此,您现在必须尝试捕获该错误。如果/ bin /包含一些实际上不再使用的旧DLL,但现在无论如何都会加载,我也担心会有奇怪的副作用。那不是生产中的问题,而是开发中的问题(实际上,这整个问题在开发中比在生产中更多的是问题,但是解决此问题的附加健壮性在生产中也会受到赞赏)。
如前所述,我也尝试了Jon Skeet的答案,并且PluginLoader在该方法的类的Gist中可以看到我的实现LoadReferencedAssemblies。这有两个问题:
System.Runtime.Serialization找不到文件。我还使用托管扩展框架进行了简短的调查,但不确定是否适用。这似乎更旨在为提供一个用于加载组件并定义它们如何交互的框架,而我实际上只是对动态加载程序集感兴趣。
因此,考虑到“我想从目录中动态加载DLL的指定列表,而又没有加载重复程序集的机会”的要求,最佳解决方案是什么?:)
如果愿意的话,我愿意彻底检查插件系统的工作方式。
我正在尝试对内部API之一使用PowerShell v4.0(x86 / 64)来做一些相当基本的事情,但是我似乎无法摆脱依赖项的加载。
到目前为止,我有:
[Reflection.Assembly]::LoadFrom("C:\Users\David Shaw\Desktop\API\API.dll")
Run Code Online (Sandbox Code Playgroud)
根据Dat Bui的博客文章。
这工作正常,然后我尝试在此DLL中使用一种类型:
$a = New-Object API.API("", 1234)
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
New-Object : Exception calling ".ctor" with "2" argument(s): "Unable to find assembly API.Dependency,
Version=1.2.5.0, Culture=neutral, PublicKeyToken=null'."
At line:1 char:6
+ $a = New-Object API.API("", 1234)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
Run Code Online (Sandbox Code Playgroud)
在FusionLog中,查找依赖项的唯一位置是:
C:\Windows\System32\WindowsPowerShell\v1.0
到目前为止我尝试过的事情:
LoadFile代替LoadFromAdd-Type -Path API.dllCurrentDirectoryLoadFrom依赖项。从我的脚本:
$OnAssemblyResolve = [System.ResolveEventHandler] …Run Code Online (Sandbox Code Playgroud) 我有一个引用双面装配的C#项目.当我尝试更新双面程序集时,即使我卸载/重新加载项目,Version标记在*.csproj文件中保持不变:
<Reference Include="<myAssembly>, Version=<oldVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath><myHintPath></HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
所以我的项目试图引用旧版本的程序集,这会导致异常.手动更改引用中的所有版本是非常痛苦的,特别是如果有很多引用的话.
我试图改变一些引用属性,比如SpecificVersion,to True和back False,以及引用刷新:
<Reference Include="<myAssembly>, Version=<newVersion>, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath><myHintPath></HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
如果我更新程序集,任何想法,如何自动更新引用?请注意,当我引用任何系统程序集时System.Configuration.Install,引用非常简单:
<Reference Include="System.Configuration.Install" />
Run Code Online (Sandbox Code Playgroud)
我可以手动删除从引用到双面装配的所有内容,但是当我更改某些属性时,它会返回到复杂版本,我不确定这是否安全.
那么如何正常更新参考?
请注意:这是不是一个重复无法加载文件或程序集“System.ComponentModel.Annotations,版本= 4.1.0.0。与链接的问题不同,此问题仅在发布应用程序之后发生。正如您将在下面看到的那样,我尝试了该帖子中提出的所有解决方案,但均未成功。
在WPF .Net Framework 4.6.1项目中,该问题引用了.Net Standard 2.0库,该库本身引用了System.ComponentModel.Annotations NuGet包。
该问题在以下项目中再现:https : //github.com/kaitlynbrown/DataAnnotationsError
重现该错误:
您将看到以下错误:
我已经尝试了多种方法来解决此问题,包括:
在WPF项目的.csproj中添加以下行:
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
Run Code Online (Sandbox Code Playgroud)
在App.config中添加以下绑定重定向:
<runtime>
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
</dependentAssembly>
</runtime>
Run Code Online (Sandbox Code Playgroud)
在WPF项目中添加对System.ComponentModel.Annotations NuGet包的引用
这些都不起作用。
请注意:问题不在 Visual Studio中构建和运行。我能够做到这一点而没有错误。尝试发布应用程序并随后运行发布的应用程序时,会发生此问题。
.net c# .net-assembly assembly-binding-redirect .net-standard
.net-assembly ×10
.net ×6
c# ×6
dll ×2
appdomain ×1
class ×1
com ×1
filepath ×1
plugins ×1
powershell ×1
reference ×1
reflection ×1
wcf ×1