伙计们,
我在Visual Studio 2010 SP1中使用ac#,多项目解决方案时遇到问题.
下面是解决方案结构:BNLib - amy个人实用工具库WidgetClientApp - asp.net应用程序前端WidgetConsoleUtilities - 控制台应用程序WidgetCore - 包含共享接口,类和枚举WidgetMiddleTier - 业务逻辑WidgetDataLayer - 通过linq到SQL的数据库访问.
问题在向控制台应用程序(WidgetConsoleUtilities)添加对中间层程序集(WidgetMiddleTier,其中包含名称空间Widget.MT)的引用之后,我在program.cs页面中添加了一个using指令:
使用Widget.MT;
然后我在using指令上收到编译器错误:
命名空间"Widget"中不存在类型或命名空间名称"MT"(您是否缺少程序集引用?)
我在同一个解决方案中的几个其他项目中使用此程序集没有问题.我在控制台应用程序中使用另一个程序集(WidgetCore,其中包含名称空间Widget.Core).
Web应用程序(Widget)使用这两个程序集没有问题.
我已经尝试删除和读取命名空间,关闭并重新打开Visual Studio 2010,清理构建,直接包括程序集而不是项目,并且nothng已经工作.
有任何想法吗?
你的帮助将大大减少!
最好,
布雷特
如何解析 ASP.NET Web开发服务器的bin文件夹之外的程序集引用?这对于没有相同dll的副本非常有用.
没有什么工作: web.config中的探测元素不起作用,我无法设置域,因为它执行应用程序管理器,我无法订阅解决汇编事件,因为它太晚了 - 当我可以订阅初始化时过度.那我该怎么办?
我正在构建一个WinForms应用程序.我想知道一个只有.exe文件或多个Dll之间是否有区别.实际上我有一个.exe的7Mb,我担心一些性能问题; 但我已经阅读了Framework在启动时加载所有需要的Dll,因此程序集碎片是无用的.是正确的?
我正在开发一个与Web服务连接的客户端应用程序,为了做到这一点,我使用WebClient类和JavaScriptSerializer类将请求的字符串解析为JSON.
我不得不从System.Web.Extensions.dll添加一个引用,使第二个工作,并且工作得很好但是如果我将我的exe文件移动到其他计算机显然会抛出我无法找到dll的异常.我试图将System.Web.Extensions.dll复制到我的应用程序的bin文件夹并再次添加引用,但它似乎无法正常工作..
我想要做的很简单,我想把我的exe文件的路径引用的dll,然后我一直迁移文件,我希望程序通过相对路径加载dll.
说真的,我不知道为什么微软没有让事情变得更容易处理(例如在java中导入jar文件),这非常令人困惑,同样的事情发生在我之前的wiaaut.dll上我必须在系统与regsvr ..
我把MSVCR100D.DLL放到c:\ windows\system32文件夹中,但依赖者walker仍在抱怨它丢失了.有任何想法吗?
我正在从文件夹中读取dll和进程类型。
xxx.dll
xxx.interfaces.dll
Run Code Online (Sandbox Code Playgroud)
当我加载xxx.dll并在该程序集上调用GetTypes时,它将引发异常。
{System.IO.FileNotFoundException: Could not load file or assembly 'xxx.Interfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'xxx.Interfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
=== Pre-bind state information ===
LOG: User = xxx
LOG: DisplayName = xxx.Interfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///<myapp>/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: <myapp>\bin\Debug\Diagrammer.vshost.exe.Config
LOG: Using …
Run Code Online (Sandbox Code Playgroud) 我写了一个程序没有做任何有用的事情,这是static void Main(string[] args)
:
int a = 0;
a++; // ... for another 2048 times
// not in a for loop or something
// just this a++ 2048 times
Run Code Online (Sandbox Code Playgroud)
它是在默认的Console Application类中编写的,是的.它就是这样做的.它真的是12.800字节.
然后我把变量a
改为someSortOfRidiculousSuspiciousWeirdAndSuperSuperEnormousMegaHyperGigaVariableNameThatsNotReallyFunToReadOrWrite
.我编译它,大小非常相似(12.800字节).
这是为什么?如果我反编译它,我可以看到长文件名.我还看到调用变量根本不会增加大小,因为它与某种类型的数字相关联,如果是这样的话a
.但是我看到了这个:
.locals init
(
[0] int32 someSortOfRidiculousSuspiciousWeirdAndSuperSuperEnormousMegaHyperGigaVariableNameThatsNotReallyFunToReadOrWrite
)
Run Code Online (Sandbox Code Playgroud)
当它再次被替换num1
(不是a
,如你所想)时,这将会明显变小,但我无法在文件大小的任何地方看到它!
这是为什么?
另外:我认为assemlby的属性窗口(清除:右键单击windows中的文件 - >属性)是不对的.当我添加几个Console.WriteLine("Test")
也不增加大小.
编辑:人们建议我的变量名称> 512字节.如果我的变量名称达到> 512个字符(512字节),我得到编译器错误"标识符太长"
最近,我遇到了InternalsVisibleTo方法,使内部类和方法对其他程序集可见.虽然这在你有大量程序集的应用程序中非常有用,并且你想避免循环依赖或代码重复,但我们中的一些人认为这可能会暴露一个安全漏洞.你的想法是什么?
例如,如果我有一个属性:
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("foo")]
即使将其隐藏在assemblyInfo.cs
文件中,也可以通过反汇编等方式发现这一点.并非每个人都会对其组件进行签名或混淆.现在,有了可能有更多功能的信息,我可以创建自己的程序集foo.dll
,然后使用我以前无法使用的方法/类.
考虑一种情况,其中方法的主要逻辑仅应在特定条件下实际运行。据我所知,有两种基本方法可以实现此目的:
如果逆条件为真,则只需返回:
public void aMethod(){
if(!aBoolean) return;
// rest of method code goes here
}
Run Code Online (Sandbox Code Playgroud)
要么
如果原始条件为真,则继续执行:
public void aMethod(){
if(aBoolean){
// rest of method code goes here
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我猜想这些实现中哪个更有效取决于其编写的语言和/或由编译器/解释器/ VM(取决于语言)实现if
语句和return
语句以及可能的方法调用的方式。所以我的问题的第一部分是,这是真的吗?
我的问题的第二部分是,如果第一部分的答案是“是”,那么上述哪种代码流模式在C#/。NET 4.6.x中更有效?
编辑: 参考Dark Falcon的评论:这个问题的目的并不是要解决性能问题或优化我编写的任何实际代码,我只是对编译器如何实现每个模式的每个部分感到好奇,例如参数的缘故,如果它是在没有编译器优化的情况下逐字编译的,那会更有效吗?
我正在尝试将外部程序集的依赖项添加到从Visual Studio 2017开发和发布的Azure函数中.在Portal上开发的Azure函数上,我可以使用#r正常添加依赖项,并在函数中引用.dll目录.在Visual Studio中,如果我尝试在本地计算机上引用相同的.dll(这很有意义),我会得到"引用无效或不受支持",并且它不允许我引用本地计算机上不存在的程序集但存在在Function目录中(这也很有意义).所以问题是,如何将程序集引用添加到Visual Studio上开发的Azure函数?我错过了一些明显的东西吗
(注意,还有其他原因禁止仅仅复制功能并在Portal上完全开发它,所以这不是一个选项)
.net-assembly ×10
c# ×8
.net ×7
dll ×3
reflection ×3
asp.net ×1
assemblies ×1
azure ×1
c#-4.0 ×1
c++ ×1
compilation ×1
namespaces ×1
performance ×1
vb.net ×1
webserver ×1