标签: .net-assembly

修改编译的.Net Exe

我有一个用C#编写的应用程序(当然没有源代码),需要稍微更改一下.例如,我需要停止创建不必要菜单的几行代码.所以我想我应该对它们进行评论.

源代码没有混淆.我知道我可以使用Reflector/Reflexil等工具完全反编译,更改和编译.但每个人都知道,通过这样做,许多代码部分将无法再次编译!Reflector(或任何其他产品)中是否有一种方法可以在没有此过程的情况下禁用/更改部分内容?

谢谢.

c# reflector .net-assembly

12
推荐指数
3
解决办法
2万
查看次数

如何将ASP.NET MVC应用程序中的模型,视图和控制器分成不同的程序集

目前我正试图进入ASP.NET MVC框架.
对于我的大多数测试应用程序,我使用了一个程序集/项目.这适用于一些较小的应用程序.然后我想知道如何将模型,控制器和视图类放入单独的程序集中?在非常大的Web应用程序中,将所有内容放入单个程序集/项目中并不现实.

所以我的问题是:是否有可能告诉ASP.NET MVC框架在另一个程序集中搜索视图和/或控制器而不会失去路由引擎的内置灵活性?

.net asp.net asp.net-mvc .net-assembly

11
推荐指数
1
解决办法
7851
查看次数

参考没有强名称的汇编

有没有办法引用没有强名称的库?当我在引用中添加对程序集的引用并重建解决方案时,一切都很好,但是当我从这个程序集解决方案调用该类时,它不会构建.

输出表示引用的程序集应具有强名称.什么是最好的解决方案?强命名库不是首选.

.net c# .net-assembly

11
推荐指数
2
解决办法
1万
查看次数

Powershell dll加载

我有一个Powershell脚本调用C#库中的方法.库dll加载为:

[Reflection.Assembly]::LoadFrom("$automationHome\dll\abc.dll") | Out-Null
Run Code Online (Sandbox Code Playgroud)

现在,我的C#库中使用了另一个库xyz.dll.我相信我不需要在Powershell脚本中加载它,因为abc.dll将解析它.但是,我收到一个错误说:

无法加载文件或程序集'xyz,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.该系统找不到指定的文件.

有人可以告诉我如何解决这个问题吗?

powershell .net-assembly

11
推荐指数
1
解决办法
2万
查看次数

使用AppDomain.AssemblyResolve事件

我正在尝试使用AppDomain.AssemblyResolve事件来处理异常,同时解析在运行时加载的某些DLL的程序集(SerializedException用于动态加载的Type).

当事件被触发时,我在我的目录中加载所有DLL并创建一个Assembly数组,然后我使用此方法来获取Assembly包含我指定的类型:

public static Assembly GetAssemblyContainingType(String completeTypeName, 
                                                 Assembly[] assemblies)
{
    Assembly assembly = null;

    foreach (Assembly currentassembly in assemblies)
    {
        Type t = currentassembly.GetType(completeTypeName, false, true);
        if (t != null)
        {
            assembly = currentassembly;
            break;
        }
    }

    return assembly;
}
Run Code Online (Sandbox Code Playgroud)

问题是这个代码只能用于一个AssemblyQualifiedName,并且ResolveEventArgs.Name事件提供的代码不是那么有用.

你能建议我一些解决方法吗?

有没有办法在事件被触发时传递一些其他参数?

.net c# .net-assembly

11
推荐指数
1
解决办法
2万
查看次数

为什么我(有时)必须引用我引用的程序集引用的程序集?

我有一个程序集A,它定义了一些带有一些重载的接口:

public interface ITransform
{
    Point InverseTransform(Point point);
    Rect InverseTransform(Rect value);
    System.Drawing.Point InverseTransform(System.Drawing.Point point);
}
Run Code Online (Sandbox Code Playgroud)

...和一个引用A(二进制文件而不是项目)的程序集B并调用其中一个重载:

var transform =
    (other.Source.TransformToDisplay != null &&
    other.Source.TransformToDisplay.Valid) ?
    other.Source.TransformToDisplay : null;
if (transform != null)
{
    e.Location = transform.InverseTransform(e.Location);
}
Run Code Online (Sandbox Code Playgroud)

准确地说,它调用System.Windows.Point的过载InverseTransform的方法,因为这是属性的类型Locatione.

但是当我在IDE中构建B时,我得到:

错误CS0012:类型'System.Drawing.Point'在未引用的程序集中定义.您必须添加对程序集'System.Drawing,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.

即使这甚至不是我所说的过载.当我注释掉InverseTransform调用重载方法的行时,即使我仍在实例化类型的对象,它也能正常构建ITransform.

为什么?有没有办法解决这个问题,而无需添加对System.Drawing所有地方的引用?

c# dependencies visual-studio-2010 .net-assembly c#-4.0

11
推荐指数
1
解决办法
6323
查看次数

无法加载文件或程序集'Oracle.DataAccess错误

我用C#构建ASP.NET应用程序,我想连接到oracle数据库.
Oracle.DataAccess在我的64位Microsoft Window Server 2008计算机上添加了对我的应用程序的引用.我还在我的机器上安装了ODAC(Oracle数据访问组件),并且Oracle.DataAccess.dll也存在于此路径上

C:\ WINDOWS\Microsoft.NET \装配\ GAC_64\Oracle.DataAccess

但当我尝试连接时遇到以下错误:

无法加载文件或程序集'Oracle.DataAccess,Version = 4.112.3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342'或其依赖项之一.该系统找不到指定的文件.

c# asp.net gac oracle11g .net-assembly

11
推荐指数
1
解决办法
6万
查看次数

加载程序集时依赖于另一个域的FileNotFound

我正在尝试使用插件进行应用程序.

我有MainLib.dll,我ICommon用1方法制作了一些commnon接口(让它成为).然后,我制作了2个.dll(插件),它们引用了MainLib.dll并ICommon在某些类中实现了.另外,我删除了这个.dll exept中的所有引用System.

然后,我创建了一个应用程序,它监视文件夹".\\Plugins"并加载所有.dll newDomain,检查.dll中的类型是否实现ICommon(因此该应用程序也引用MainLib.dll).如果是 - 在某些列表中添加.dll的名称.

现在问题出现了:在我尝试加载插件之前 - 我将MailLib.dll和System加载到newDomain,因为所有插件都依赖于此.dll.他们加载正确.然后,我开始加载插件,在这里我有:

FileNotFoundException,无法加载文件或程序集'PluginWithException,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.系统找不到指定的文件.)字符串Assembly loadedAssembly = domain.Load(Assembly.LoadFrom(asm).FullName);

PluginWithException程序集只有2个依赖项--System和MainLib.在我尝试加载PluginWithException之前,我检查了新域中的程序集,System和MainLib已加载到此域.所以我看不到任何依赖的问题.我读了这个主题,尝试了解决方案,ProxyDomain但异常是一样的.

我做错了什么?

这里的代码:

public static List<string> SearchPlugins(string[] names)
{
    AppDomain domain = AppDomain.CreateDomain("tmpDomain");
    domain.Load(Assembly.LoadFrom(@".\MainLib.dll").FullName);
    domain.Load(@"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
    MessageBox.Show(GetAssembies(domain)); // here I can see that System and MailLib exist in new domain

    List<string> plugins = new List<string>();

    foreach (string asm in names)
    {
        Assembly …
Run Code Online (Sandbox Code Playgroud)

c# plugins appdomain .net-assembly

11
推荐指数
2
解决办法
1万
查看次数

如何以编程方式确定是否在GAC中安装了.NET程序集?

如果程序集在本地计算机上的GAC(全局程序集缓存)中注册,那么以编程方式检查的最简单方法是什么?是否有一些易于使用的.NET API,我可以给它一个程序集DLL或Assembly对象本身的位置,以检查它是否存在于本地机器上的GAC中?在我的情况下,我正在检查的程序集已经被加载到程序检查的当前AppDomain中,因此我不确定调用Assembly.ReflectionOnlyLoad和捕获异常将像我在其他帖子中看到的那样工作,加上这似乎有点hacky .

理想情况下,我想避免调用外部可执行文件gacutil.exe来检查.

.net c# global-assembly-cache .net-assembly

11
推荐指数
1
解决办法
1万
查看次数

使用 ServiceCollection 升级到 .NET 6 后版本冲突

事实证明,从 .NET 5 升级到 .NET 6 并不像我预期的那么简单。

由于以下错误,我的所有单元测试项目都无法编译

Severity    Code    Description Project File    Line    Suppression State
Error   CS0433  The type 'ServiceCollection' exists in both 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' and 'Microsoft.Extensions.DependencyInjection, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'    Sample.DynamoDb.FunctionalTests C:\src\my-solution\test\Sample.DynamoDb.FunctionalTests\DependencyInjectionTests\GetServiceTests.cs 22  Active
Run Code Online (Sandbox Code Playgroud)

他们引用了依赖于版本 6 的类库,但由于某种原因,测试项目本身Microsoft.Extensions.DependencyInjection.Abstractions似乎存在依赖关系。Microsoft.Extensions.DependencyInjection可能是被我使用的一些软件包拖过去的(我不知道是哪一个)。

这是我的测试项目

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <Nullable>Enable</Nullable>
        <IsPackable>False</IsPackable>
        <IsPublishable>False</IsPublishable>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="FluentAssertions" Version="6.2.0" />
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />

        <PackageReference Include="xunit" Version="2.4.1" />
        <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
            <PrivateAssets>all</PrivateAssets>
        </PackageReference>
        <PackageReference Include="coverlet.collector" Version="3.1.0"> …
Run Code Online (Sandbox Code Playgroud)

.net-assembly .net-6.0

11
推荐指数
1
解决办法
4858
查看次数