我正在尝试导出.dll中的控件库,供办公室中的其他开发人员使用.
我原创的解决方案如下所示:
解决方案1:
- Mri.Controls(类库)
- Mri.FmTool(Web应用程序)
Mri.FmTool引用了Mri.Controls.
在Mri.Controls里面,我有一些javascript WebResources.Mri.FmTool似乎很好地阅读了WebResources,当Mri.FmTool网络应用程序运行时,我所有的javascript网络资源都会出现.
所以,现在我正在尝试创建一个简单的解决方案来使用Mri.FmTool
解决方案2:
- Mri.ConsumerTest(Web应用程序)
我使用了最新的Mri.Controls.dll并将其添加为Mri.ConsumerTest应用程序的参考.来自Mri.Controls的所有控件似乎都在Mri.ConsumerTest中工作.Intellisense正在工作,它编译,没有问题.
但是,在运行它时,大多数WebResource.axd文件都是空的,只是空白.一个WebResource.axd文件不是空白的,它只是说"找不到此资源".
以下是"属性"窗口中javascript文件的属性:
构建操作:"嵌入式资源"
复制到输出目录:"始终复制"
我错过了什么步骤?
我创建了一个系统,它使用CLR触发器连接到WCF服务器并通知它有关DB的更改.它在SQL Server 2008 R2上运行正常.现在我尝试在SQL Server 2012上迁移.要使用WCF,我需要加载SMDiagnostics.dll程序集.我已经检查过clr在db中启用了,并设置了值得信任的"on",禁用了WCF debuging,我已经检查过SQL Server在本地系统帐户下运行,所以权限没有问题.现在我的问题是,当我运行以下命令
IF NOT EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'SMdiagnostics')
create assembly [SMdiagnostics]
from 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMdiagnostics.dll'
with permission_set = unsafe
go
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
警告:Microsoft .NET Framework程序集'smdiagnostics,version = 3.0.0.0,culture = neutral,publickeytoken = b77a5c561934e089,processorarchitecture = msil.' 您正在注册未在SQL Server托管环境中进行全面测试,并且不受支持.将来,如果升级或维护此程序集或.NET Framework,则CLR集成例程可能会停止工作.有关更多详细信息,请参阅SQL Server联机丛书.Msg 6586,Level 16,State 1,Line 2 Assembly'SMdiagnostics'无法安装,因为现有的策略将使其无法使用.
SMdiagnostics.dll存在于指定的路径中.据我了解它在SQL Server 2012或GAC中的某种策略,但我找不到有关SMdiagnostics的政策.任何想法如何解决?谢谢.
无论如何在C#中指定程序集和命名空间?
举例来说,如果你同时引用PresentationFramework.Aero,并PresentationFramework.Luna在一个项目中,您可能会注意到,他们都共享同一个命名空间,但不同的执行相同的控制.
以ButtonChrome为例.它存在于命名空间下的两个程序集中Microsoft.Windows.Themes.
在XAML中,您将程序集与命名空间一起包含在内,所以这里没有问题
xmlns:aeroTheme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
xmlns:lunaTheme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Luna"
<aeroTheme:ButtonChrome ../>
<lunaTheme:ButtonChrome ../>
Run Code Online (Sandbox Code Playgroud)
但在C#代码后面我找不到反正创建的实例ButtonChrome中PresentationFramework.Aero.
以下代码在编译时给出了错误CS0433
using Microsoft.Windows.Themes;
// ...
ButtonChrome buttonChrome = new ButtonChrome();
Run Code Online (Sandbox Code Playgroud)
错误CS0433:类型'Microsoft.Windows.Themes.ButtonChrome'存在于
'c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\PresentationFramework.Aero.dll'中
和
'c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\PresentationFramework.Luna.dll'
这是非常容易理解的,编译器无法知道ButtonChrome选择哪个,因为我没有告诉它.我能以某种方式这样做吗?
我与MEF合作,我正在寻找如何通过MEF找到插件的另一种方式更改插件位置的URL,我想更改此行
Assembly.LoadFrom(@"C:\julia\project\project.Plugin.Nav\bin\Debug\NavPlugin.dll")));
Run Code Online (Sandbox Code Playgroud)
我想删除此URL,因为我需要在另一台机器上部署我的应用程序
这是我的功能:
public void AssembleCalculatorComponents()
{
try
{
//var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
//var container = new CompositionContainer(catalog);
//container.ComposeParts(this);
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.LoadFrom(@"C:\yosra\project\project.Plugin.Nav\bin\Debug\NavPlugin.dll")));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
catch (Exception ex)
{
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
你能帮我么?
谢谢
我的问题始于将.Net 2.0应用程序移动到.Net 4.0.我必须这样做的原因是Windows 8默认情况下不启用早期的.Net版本,我的应用程序无法要求用户启用它.
该应用程序是一个NPAPI插件,它通过UnmanagedExports使用.Net组件.我将其设计为低完整性应用程序,因此它必须驻留在用户的LocalLow'目录中.
在我的应用程序中,我使用动态程序集加载机制在运行时加载多个程序集.我使用以下方法加载程序集,
MyInterface Instance;
Assembly assembly = Assembly.LoadFrom(AssemblyFile);
Type type = assembly.GetType(Identifier); // Identifier is implementing the MyInterface
Instance = Activator.CreateInstance(type) as MyInterface;
// Do something with the Instance
Run Code Online (Sandbox Code Playgroud)
将项目修改为.Net 4.0之后,我注意到当二进制文件放在LocalLow目录中时插件崩溃(它在其他地方工作).我的下一步是创建一个简约插件,用尽可能少的代码来找出问题.我注意到动态程序集加载失败,出现以下异常,
System.IO.FileLoadException: Could not load file or assembly '<assemblyPath>' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515 (COR_E_NOTSUPPORTED)) --->
System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the …Run Code Online (Sandbox Code Playgroud) 在公共语言运行时(CLR) Microsoft页面中,它表示.Net Framework 4和4.5都使用CLR版本4.
但是在此页面(.NET Framework版本和依赖项)中,它编写了'.Net Framework 4.5版包含了CLR 4的更新版本'
还写道:
' 将阻止在仅安装了.NET Framework 4.5的计算机上运行以.NET Framework 4.5.1为目标的可执行文件,并提示用户安装.NET Framework 4.5.1.此外,不应从.NET Framework 4.5应用程序调用.NET Framework 4.5.1程序集."
问题:如果所有Net Framework版本4和4.5和4.5.1在相同的CLR版本4上运行托管代码,为什么我不能在仅安装了.Net 4.0的机器上运行以.Net framework 4.5为目标的可执行文件?
(不管你是否针对.NET framework 4或4.5或4.5.1,编译器最终是否会产生适用于CLR版本4的IL?)
我的控制台应用程序使用依赖于Newtonsoft.Json v4.5.0.0的System.Net.Http.Formatting v5.1.0.0.我的应用程序包括Newtonoft.Json的v6.0.0.0(由于其他原因).
为了使System.Net.Http.Formatting使用新的Newtonsoft.Json版本,我添加了一个程序集重定向到App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我仍然得到以下异常:
A first chance exception of type 'System.IO.FileLoadException' occurred in System.Net.Http.Formatting.dll
Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Run Code Online (Sandbox Code Playgroud)
融合日志显示正确的程序集已加载但由于不匹配而失败:
*** Assembly Binder Log Entry (2014.08.10. @ 13:13:25) ***
The operation failed. …Run Code Online (Sandbox Code Playgroud) 我使用的共享下一个C#代码示例大卫赫弗南 "为从应用程序的资源加载.NET程序集,并从内存中运行它:
Assembly a = Assembly.Load(bytes);
MethodInfo method = a.EntryPoint;
if (method != null)
method.Invoke(a.CreateInstance(method.Name), null);
Run Code Online (Sandbox Code Playgroud)
在这里,我只是在VB.NET中分享我正在使用的改编:
Public Shared Sub Execute(ByVal resource As Byte(), ByVal parameters As Object())
Dim ass As Assembly = Assembly.Load(resource)
Dim method As MethodInfo = ass.EntryPoint
If (method IsNot Nothing) Then
Dim instance As Object = ass.CreateInstance(method.Name)
method.Invoke(instance, parameters)
If (instance IsNot Nothing) AndAlso (instance.GetType().GetInterfaces.Contains(GetType(IDisposable))) Then
DirectCast(instance, IDisposable).Dispose()
End If
instance = Nothing
method = Nothing
ass = Nothing
Else
Throw New …Run Code Online (Sandbox Code Playgroud) 我有一个使用来动态生成的程序集AssemblyBuilder.DefineDynamicAssembly,但是当我尝试加载它时,出现以下错误:
System.IO.FileNotFoundException:'无法加载文件或程序集'test,Culture = neutral,PublicKeyToken = null'。该系统找不到指定的文件。'
这是要重现的完整代码:
var name = new AssemblyName("test");
var assembly = AssemblyBuilder.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);
var assembly2 = Assembly.Load(name);
Run Code Online (Sandbox Code Playgroud)
我正在使用.NET Core 2.0、2.1和2.2。
有人可以解释为什么会发生这种情况以及任何可能的解决方案吗?
我使用的是 Visual Studio 2022 v17.0.4。我想为我的程序集创建新密钥以对其进行强命名。根据文档:“在选择强名称密钥文件框中,选择浏览,然后导航到密钥文件。要创建新的密钥文件,请选择新建并在创建强名称密钥对话框中输入其名称”。文档
找不到“新建”按钮。

在旧的 Visual studio 中这很容易,但在新的 VS2022 中找不到 NEW 按钮。

请帮忙!