我有一个嵌入式资源(包含在执行程序集中),可以使用以下命令获取它:
Assembly.GetExecutingAssembly().GetManifestResourceStream("<MyNamespace>.<File>")
Run Code Online (Sandbox Code Playgroud)
如果程序集的命名空间发生变化,我必须找到字符串中包含的所有位置。为了避免这种情况,我想动态获取名称空间。是否有可能获取程序集的名称空间或是否可以使用固定值?
感谢您的任何回复。
我在.net平台上的时间不长。不到两个月。我遇到了这个“无法从程序集中加载类型 blah.blah.blah。
因此,我一直在与多种资源进行斗争,包括此处差异帖子中的建议。仍然没有运气。但最接近的建议似乎表明某些参考文献可能针对较低版本的 .net。实际上,有许多针对不同版本的参考,并且在其中一些参考中,还有更多可能针对不同版本的依赖程序集。
我一直在努力使用 VS 2010(.net 4.0) 转换我拥有源代码的一些程序集,整个内容几乎让我不知所措。
所以我沮丧地问:我的参考组件(及其依赖项)和我的项目目标必须相同版本吗?
这是我的代码:
Microsoft.CSharp.CSharpCodeProvider provider = new CSharpCodeProvider();
ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters compilerparams = new CompilerParameters();
compilerparams.GenerateInMemory = false;
CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code);
if (results.Errors.HasErrors)
{
StringBuilder errors = new StringBuilder("Compiler Errors :\r\n");
foreach (CompilerError error in results.Errors )
{
errors.AppendFormat("Line {0},{1}\t: {2}\n",
error.Line, error.Column, error.ErrorText);
}
throw new Exception(errors.ToString());
}
else
{
return results.CompiledAssembly;
}
Run Code Online (Sandbox Code Playgroud)
如何将创建的dll保存到我自己的特定文件夹中?当我调试时,不知何故,程序集位置位于'AppData/Local/Temp /'文件夹中.
我想用下面的代码在我的程序(http://sshnet.codeplex.com/)SFTP
我下载它并放入我的C#项目所在的文件夹中.我还添加了代码:
using Renci.SshNet;
using Renci.SshNet.Sftp;
Run Code Online (Sandbox Code Playgroud)
现在我需要告诉Visual Studio在哪里查找它.我尝试了"添加引用",但我下载的内容仅包含扩展名为.cs no .dll的文件.
接下来我该怎么办?
我读了几本关于C#的书(由Troelsen和Michaelis撰写),但所有这些合理的业务对我来说并不清楚.
我有包含 MyMethod() 的 Tools.dll 文件,如下所示:
public void MyMethod()
{
global::System.Windows.Forms.MessageBox.Show("Sth");
}
Run Code Online (Sandbox Code Playgroud)
现在,我尝试从另一个文件运行此汇编方法:
System.Reflection.Assembly myDllAssembly = System.Reflection.Assembly.LoadFile(@"PATH\Tools.dll");
myDllAssembly.GetType().GetMethod("MyMethod").Invoke(myDllAssembly, null); //here we invoke MyMethod.
Run Code Online (Sandbox Code Playgroud)
运行后发生“System.NullReferenceException”。它说“对象引用未设置到对象的实例。”
那么我该如何解决它?
我确信这个 .dll 构建事实没有问题。
注意:汇编代码来自:http://www.codeproject.com/Articles/32828/Using-Reflection-to-load-unreferenced-assemblies-a
在数据库中,我通常使用基于 XML 的拆分函数版本。后来通过一些研究,我创建了 split 函数的 Assembly CLR 版本。
在数据库更新过程(修补程序)中,我删除所有用户函数,修补数据库,然后再次创建用户函数。由于补丁过程,它将再次恢复拆分功能的 XML 版本。
到目前为止,我检查了 MSDN,但找不到任何提示:如何检查 DLL 是否已注册为数据库内的程序集?
在 Management Studio 中,我可以打开数据库 -> 程序能力 -> 程序集,并且可以看到 DLL(如果已注册)。但我想以编程方式执行此操作,如果 DLL 可用,则在 CREATE FUNCTION 上使用 CLR 版本,否则我想使用 XML 版本来确保拆分函数在任何情况下都可用。
有谁知道这是否可能?
有很多类似的问题。但他们都岁了,今天不工作(不再?)。
所以这是我的问题:我想将 ac# 程序集加载到内存中,并找出它是否包含与我想使用的接口匹配的类型。如果程序集包含此类类型,我会在主应用程序中引用并使用它。如果没有,我想卸载 dll,然后能够删除文件(从我的主应用程序或在应用程序运行时手动删除)。
我的第一个实现只是省略了 appdomain 方法,但它有效(不删除或替换程序集文件)。然后我尝试按照各种示例中的描述加载程序集。但是没有我能够从磁盘中删除不需要的程序集文件。
当程序集在应用程序中被引用时,根本无法卸载和删除它们,或者我做错了什么。这是我最后尝试的:
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Windows.Forms;
using ESTLogViewer_V2.Formulare;
using Parent;
namespace ESTLogViewer_V2
{
static class Program
{
//<summary>
//Der Haupteinstiegspunkt für die Anwendung.
//</summary>
[STAThread]
static void Main()
{
LoadTest.Haupt(null);
}
}
}
namespace Parent
{
public class Constants
{
// adjust
public const string LIB_PATH = @"e:\PRJDOTNET4\ESTLogViewer V2\Plugins\LogFiles_Plugin.dll";
}
public interface ILoader
{
string Execute();
}
public class Loader : MarshalByRefObject, ILoader
{
public …
Run Code Online (Sandbox Code Playgroud) 我正在使用一个名为WinSCPnet.dll
. 该代码仅在我将其设置AssemblyFileVersion
为与WinSCP.exe
安装位置相同的版本时才有效。
我得到了这个例外:
C:\Program Files (x86l\WinSCP\WinSCP.exe (5.15.1.0) 的版本与此程序集的版本不匹配 C:\Users\burkarty\source\repos\UAReport3\UAReport3\bin\Debug\UAReport3.exe (0.0.0.0)。
如何独立于 WinSCP 版本运行我的代码?
我搜索了一个类似的问题,但没有对我有用。
我已经阅读了GetEntryAssembly和GetExecutingAssembly 的文档,试图弄清它们之间的区别。我只是不明白这些定义是如何相互关联的。尽管我看到了两种不同的表述,但我无法理解所暗示的区别。在我的脑海中,这是一种potayto-potahto情况,当我尝试显示每个返回的Assemby对象的值时,屏幕上的相同内容会加强这种情况。
自然地,肯定存在一些差异,这只是我的愚蠢让我无法意识到它是什么。所以我做了一些研究,才发现大部分智慧都是关于获得道路的。明确针对他们之间比较的孤独资源是一个死链。
我可以问一个具体的例子,这两个方法返回的对象的内容不同吗?最好简要说明原因。
我正在尝试从 SQL Server 2017 中的 .NET Core dll 创建程序集:
CREATE ASSEMBLY my_assembly
FROM 'C:\Temp\MyDll.dll' WITH PERMISSION_SET = SAFE;
Run Code Online (Sandbox Code Playgroud)
这是 dll csproj :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.SqlManagementObjects" Version="161.46041.41" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,出现以下错误:
程序集“MyAssembly”引用程序集“system.runtime, version=4.2.2.0,culture=neutral, publickeytoken=b03f5f7f11d50a3a.”,当前数据库中不存在该程序集。SQL Server 尝试从引用程序集来自的同一位置定位并自动加载引用程序集,但该操作失败(原因:2(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。
我该如何解决?
.net-assembly ×10
c# ×8
.net ×4
reflection ×2
.net-core ×1
asp.net ×1
compilation ×1
namespaces ×1
runtime ×1
sql-server ×1
t-sql ×1
vb.net ×1
winscp ×1
winscp-net ×1