我有一个用C#编写的应用程序(当然没有源代码),需要稍微更改一下.例如,我需要停止创建不必要菜单的几行代码.所以我想我应该对它们进行评论.
源代码没有混淆.我知道我可以使用Reflector/Reflexil等工具完全反编译,更改和编译.但每个人都知道,通过这样做,许多代码部分将无法再次编译!Reflector(或任何其他产品)中是否有一种方法可以在没有此过程的情况下禁用/更改部分内容?
谢谢.
目前我正试图进入ASP.NET MVC框架.
对于我的大多数测试应用程序,我使用了一个程序集/项目.这适用于一些较小的应用程序.然后我想知道如何将模型,控制器和视图类放入单独的程序集中?在非常大的Web应用程序中,将所有内容放入单个程序集/项目中并不现实.
所以我的问题是:是否有可能告诉ASP.NET MVC框架在另一个程序集中搜索视图和/或控制器而不会失去路由引擎的内置灵活性?
有没有办法引用没有强名称的库?当我在引用中添加对程序集的引用并重建解决方案时,一切都很好,但是当我从这个程序集解决方案调用该类时,它不会构建.
输出表示引用的程序集应具有强名称.什么是最好的解决方案?强命名库不是首选.
我有一个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'或其依赖项之一.该系统找不到指定的文件.
有人可以告诉我如何解决这个问题吗?
我正在尝试使用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事件提供的代码不是那么有用.
你能建议我一些解决方法吗?
有没有办法在事件被触发时传递一些其他参数?
我有一个程序集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的方法,因为这是属性的类型Location在e.
但是当我在IDE中构建B时,我得到:
错误CS0012:类型'System.Drawing.Point'在未引用的程序集中定义.您必须添加对程序集'System.Drawing,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.
即使这甚至不是我所说的过载.当我注释掉InverseTransform调用重载方法的行时,即使我仍在实例化类型的对象,它也能正常构建ITransform.
为什么?有没有办法解决这个问题,而无需添加对System.Drawing所有地方的引用?
我用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'或其依赖项之一.该系统找不到指定的文件.
我正在尝试使用插件进行应用程序.
我有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) 如果程序集在本地计算机上的GAC(全局程序集缓存)中注册,那么以编程方式检查的最简单方法是什么?是否有一些易于使用的.NET API,我可以给它一个程序集DLL或Assembly对象本身的位置,以检查它是否存在于本地机器上的GAC中?在我的情况下,我正在检查的程序集已经被加载到程序检查的当前AppDomain中,因此我不确定调用Assembly.ReflectionOnlyLoad和捕获异常将像我在其他帖子中看到的那样工作,加上这似乎有点hacky .
理想情况下,我想避免调用外部可执行文件gacutil.exe来检查.
事实证明,从 .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 ×10
c# ×7
.net ×4
asp.net ×2
.net-6.0 ×1
appdomain ×1
asp.net-mvc ×1
c#-4.0 ×1
dependencies ×1
gac ×1
oracle11g ×1
plugins ×1
powershell ×1
reflector ×1