我正在开发一个Sharepoint应用程序并使用.NET AjaxControlToolkit库,我们正在向Sharepoint添加一个自定义的aspx页面.Sharepoint 2007以怪癖模式运行,因此我对AJAX库进行了一些修改,使其表现得像通常那样.问题是,另一个团队已经使用了AJAX库,它与我的版本不同.这会导致冲突,因为bin文件夹中只能有一个具有相同名称的dll.
据我所知,.NET应该能够轻松应对这种情况.我尝试使用强名称和GAC来解决它,但它仍然引用bin文件夹中的dll.如果bin文件夹中没有AjaxControlToolkit.dll,则应用程序将无法加载程序集.
如果我在我这样使用完整的装配信息
<%@
Register
tagprefix="AjaxControlToolkit"
namespace="AjaxControlToolkit"
assembly="AjaxControlToolkit, Version=1.0.299.18064,
PublicKeyToken=12345678abcdefgh,
Culture=neutral"
%>
Run Code Online (Sandbox Code Playgroud)
它给了我编译器错误CS0433
有人可以帮助我如何在应用程序中使用多个版本的程序集?
我有一个.net 2.0 c#ClickOnce应用程序,它通过Web服务连接到它的数据.我被告知可能加速应用程序的一种方法是事先生成序列化程序集.我在这方面有几个问题.
是否生成序列化程序集的默认设置是Auto.VS2005使用什么标准来决定是否生成序列化程序集?看起来它不会在Debug配置下生成,但它在Release配置下生成,但我无法确定并且无法在任何地方获取信息.
序列化程序集实际上是否改善了应用程序的启动?具体来说它有什么改进?我真的需要序列化程序集吗?
我们在让visual studio从我们的一个项目中获取最新版本的DLL时遇到了问题.
我们有多个类库项目(例如BusinessLogic,ReportData)和许多Web服务,每个都有一个我们编写的连接DLL的引用(这是对连接DLL的引用问题).
我们总是在bin/debug文件夹中指向DLL的引用(这是我们总是为任何给定项目构建的),所有自定义DLL引用都有CopyLocal = True和SpecificVersion = False
ReportData有一个对业务逻辑的引用(它也引用了连接 - 我不明白为什么这会导致问题,但是认为值得一提)
奇怪的是,当您单击"添加引用"并浏览到连接/ bin/debug时 - 将鼠标悬停在DLL文件上,将显示正确的(最新)版本(版本和文件版本总是一起递增),但是单击"确定"时,会拉出先前的版本号.即使我查看当前项目调试文件夹(其中copy local将在编译后放置DLL)显示最新版本号. - NO我在哪里可以找到Visual Studio之外的以前版本的DLL,但在该项目中引用它具有旧版本 - 即使路径是正确的.
我不知道它可能从哪个版本获得旧版本.甚至为什么它想要那个.
这可能是我遇到的最令人沮丧的问题.
有谁知道如何确保最新版本被拉过(最好是自动或编译).
编辑:
虽然不完全是我正在处理的场景,但我正在阅读这篇文章,并在某处提到CLR忽略修订号.可以理解(尽管之前这不是问题 - 我们正在修订版本39),所以我想我会更新内部版本号,仍然无法正常工作.虽然我会更新次要版本号并查看是否有任何区别,但徒劳无功.
我不是说这是答案,因为我必须首先检查一些事情,但从表面上看,这似乎解决了我的问题......
进一步编辑:在其他类库中,这似乎已经解决了问题,但是在测试Windows应用程序中,它仍然通过以下版本提取:(
如果我再次增加次要版本号,同样的问题又回来了,我留下了错误的版本.
进一步编辑 - 我创建了一个新的项目,添加了一个参考,但仍然有完全相同的问题.这表明问题仅限于我引用的项目.希望我知道为什么!
以前有人遇到过这个问题,知道如何解决这个问题吗?
救命!
所以有点背景.我是c和汇编代码的初学者,我们有一个"炸弹"赋值(用c编写)调用需要某些密码的方法,但代码不可见,我需要通过查看汇编代码来确定正确的密码.
代码表明此方法的密码是6个数字,它作为"输入"传递给方法阶段2(我试图避免触发).
我感到困惑的部分是从+64跳到+42.它似乎是一个循环,但我不确定每次传递如何影响堆栈.如果最后两个数字是相同的,它看起来像循环退出,并且它与添加和减去4有关,但我不确定如何遍历地址.如果任何人都可以翻译正在发生的事情,或者如果我需要查看任何特定的寄存器/位置,那将会有很大帮助.还有4个阶段,每个阶段都应该更复杂,所以我希望能够很好地理解如何阅读这些阶段.
此外,如果任何人有一个良好的资源(如可打印表)与汇编代码关键字也会有所帮助,如果32位和64位寄存器之间有任何差异,我需要担心除寄存器名称之外. .
82 phase_2(input);
(gdb) disas phase_2
Dump of assembler code for function phase_2:
0x000000000040106b <phase_2+0>: push %rbp
0x000000000040106c <phase_2+1>: push %rbx
0x000000000040106d <phase_2+2>: sub $0x28,%rsp
0x0000000000401071 <phase_2+6>: mov %rsp,%rsi
0x0000000000401074 <phase_2+9>: callq 0x401457 <read_six_numbers>
0x0000000000401079 <phase_2+14>: cmpl $0x0,(%rsp)
0x000000000040107d <phase_2+18>: jne 0x401086 <phase_2+27>
0x000000000040107f <phase_2+20>: cmpl $0x1,0x4(%rsp)
0x0000000000401084 <phase_2+25>: je 0x40108b <phase_2+32>
0x0000000000401086 <phase_2+27>: callq 0x401421 <explode_bomb>
0x000000000040108b <phase_2+32>: lea 0x8(%rsp),%rbx
0x0000000000401090 <phase_2+37>: lea 0x18(%rsp),%rbp
0x0000000000401095 <phase_2+42>: mov -0x8(%rbx),%eax
0x0000000000401098 <phase_2+45>: add -0x4(%rbx),%eax
0x000000000040109b <phase_2+48>: cmp …Run Code Online (Sandbox Code Playgroud) 我遇到一个asp.net错误.我的应用程序在开发和测试environemnt上工作得很好.但在生产时它会给我以下错误:
无法加载文件或程序集"someProject"或其依赖项之一.访问被拒绝.
在我们升级到visual studio 2010和4.0框架后,我们的主干构建立即开始打破无法加载文件或程序集错误.
我们确定了一个3.5的项目不能引用4.0其他项目因为,作为错误状态,我们会得到这个错误该组件由运行时比当前加载的运行新建成并无法加载.
我们已经解决了这个问题,后备箱一直很好.
然而,我最近做了一个分支和标记,当我尝试构建分支时,突然出现了这个错误; 除了错误是关于我们自己的.net 4.0项目对System.Configuration DLL的引用之一.
Towps.Namespace.MyService.csproj在Core.Dev\Towps\Projetcs \应用\为MyService:
RG0000:无法加载引用的程序集
"C:\ WINDOWS\Microsoft.Net \装配\ GAC_MSIL\System.Configuration\v4.0_4.0.0 .0__b03f5f7f11d50a3a\System.Configuration.dll".
抓到一个BadImageFormatException说:"无法加载文件或程序集
'C:\ WINDOWS\Microsoft.Net \装配\ GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'.或者它的一个依赖
此程序集由比当前加载的运行时更新的运行时构建,无法加载." 在ResGen(0,0)
我尝试在该系统上设置特定的版本属性.配置DLL引用为true.
我可以在其属性中看到运行时版本是v4.0.30319,版本是4.0.0.0.
该DLL裁判的路径是C:\ Program Files文件(x86)的\参考大会\微软\ Framework.NETFramework\V4.0\System.Configuration.dll这对我来说看起来不错.
CrusieControl使用MSBuild尝试构建的csproj文件的目标框架是针对框架4.0.再好像.
它构建在IDE中,用于主干和分支.Cruise Control在后备箱中构建它.当CrusieControl尝试构建时,分支构建失败.
有什么想法会发生什么?
这可能是一个MSBuild不匹配,但我已经扫描的配置文件和CruiseControl的使用并有年长MSBuilds没有引用的MSBuild PROJ文件; 这是有道理的,因为所有这些都更新,以使主干工作.
分支只是一个主干的副本,所以我很难确定可能有什么区别!
我在我的(巨大的).NET 4项目中遇到了一个奇怪的行为.在代码中的某个时刻,我指的是一个完全限定的类型,比如说:
System.Type type = typeof (Foo.Bar.Xyz);
Run Code Online (Sandbox Code Playgroud)
稍后,我这样做:
System.Type type = System.Type.GetType ("Foo.Bar.Xyz");
Run Code Online (Sandbox Code Playgroud)
然后我回来了null.我无法理解为什么会发生这种情况,因为我的类型名称是正确的,我已经检查过其他类型并且它们得到了正确的解决.此外,以下LINQ查询查找类型:
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies ()
from assemblyType in assembly.GetTypes ()
where assemblyType.FullName == typeName
select assemblyType;
System.Type type = types.FirstOrDefault ();
Run Code Online (Sandbox Code Playgroud)
有什么理由System.Type.GetType可以失败吗?
我终于不得不求助于这段代码而不是GetType:
System.Type MyGetType(string typeName)
{
System.Type type = System.Type.GetType (typeName);
if (type == null)
{
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies ()
from assemblyType in assembly.GetTypes ()
where assemblyType.FullName == typeName
select assemblyType;
type …Run Code Online (Sandbox Code Playgroud) 由于我们有三个显式x86和x64版本的程序集,因此我编辑了相应的.csproj文件,例如,这样的块:
<ItemGroup Condition=" '$(Platform)' == 'x86' ">
<Reference Include="CaliberRMSDK">
<HintPath>..\Libraries\CaliberRMSDK_IKVM\32bit\CaliberRMSDK.dll</HintPath>
</Reference>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\32bit\ikvm-native.dll">
<Link>ikvm-native.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\32bit\JVM.dll">
<Link>JVM.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
<Reference Include="CaliberRMSDK">
<HintPath>..\Libraries\CaliberRMSDK_IKVM\64bit\CaliberRMSDK.dll</HintPath>
</Reference>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\64bit\ikvm-native.dll">
<Link>ikvm-native.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="..\Libraries\CaliberRMSDK_IKVM\64bit\JVM.dll">
<Link>JVM.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2010中重新加载.csproj文件并使用"x86"作为平台时,所有工作都非常好.当选择'x64'作为平台时,使用正确的64位汇编参考但是链接的(<Content Include= ...>..)总是使用32位的(因此应用程序被破坏).
在项目文件中不再有任何CPU,我会'期望'它也适用于内容包括..但它没有.有什么我想念的吗?
我如何将装配标记为"安全"?
或者,我如何让Visual Studio告诉我何时装配中的某些内容不"安全"?
有时您不能使用程序集,除非它是"安全的"(例如从SQL Server).
我希望我的装配被标记为安全.如果我的装配不能被标记为安全,因为它不安全,我想知道我怎么知道我的装配是不安全的.
Visual Studio中有一些概念似乎与安全性有关,可能与组件"安全"有关,也可能没有任何关系:
允许不安全的代码汇编选项:

"不安全代码"与"安全"程序集有什么关系(如果有的话)?
(我问,因为我的程序集不"允许不安全的代码",但允许P/Invoke调用 - 我认为这是"不安全"的定义)
ClsCompliant程序集选项:
[assembly: CLSCompliant(true)]
namespace MyApplication
Run Code Online (Sandbox Code Playgroud)
不安全的代码块:
int error;
unsafe
{
error = 0x80004005;
}
Run Code Online (Sandbox Code Playgroud)
unsafe块内的代码是"不安全的"
Microsoft建议创建一个UnsafeNativeMethods包含不安全托管代码的类:
[SuppressUnmanagedCodeSecurity]
internal static class UnsafeNativeMethods
{
...
}
Run Code Online (Sandbox Code Playgroud)
这与以下形成对比SafeNativeMethods:
[SuppressUnmanagedCodeSecurity]
internal static class SafeNativeMethods
{
...
}
Run Code Online (Sandbox Code Playgroud)
包含安全的本机方法,并且NativeMethods:
internal static class SafeNativeMethods
{
...
}
Run Code Online (Sandbox Code Playgroud)
包含本机方法.
我如何将装配标记为"安全"?
SQL如何知道汇编"不安全"?
assemblies ×10
c# ×4
.net ×3
dll ×2
.net-4.0 ×1
c ×1
clickonce ×1
clr ×1
dependencies ×1
gdb ×1
gettype ×1
reference ×1
reflection ×1
sharepoint ×1
types ×1
web-services ×1