有没有办法找出是否已在未修改程序集的情况下使用TRACE或DEBUG标志集编译程序集?
原因:我们的项目使用Ant作为命令行界面.在使用maven的程序集插件进行新的程序集之后,我想进行初始测试以查看是否所有程序都已正确组装.因此,我需要在最终装配中包含单元测试.组装后,初始测试将被称为类似
> ant initTest
Run Code Online (Sandbox Code Playgroud)
build.xml文件:
<target="initTest">
<junit>
<test class="MyTest" />
</junit>
</target>
Run Code Online (Sandbox Code Playgroud)
问题是:我想在src/test/java中保留我的单元测试,而不是将它们移动到src/main/java.有没有办法告诉程序集插件包含我的单元测试?汇编描述符中的简单包含不执行...
这里有一些争论,哪个更适合从其他项目引用我们的公共代码库:通过项目或汇编.我赞成引用该项目,特别是因为我们有自动化的单元测试,证明公共代码能够满足它的需要.
另一个阵营的想法是锁定那些项目,每月只发布一次或类似的东西.然后强制所有项目引用程序集.他们认为这将保护他们免于部署未经测试的代码.他们"太忙"无法编写自动化单元测试并将其项目配置为持续集成,我对此没有任何影响,所以请不要关注这方面.
这就是我能想到为什么项目参考是更好的解决方案的原因.我也在寻找其他意见.
优点:
缺点:
我最近买了Ayende的书,在Boo中构建DSLs(买它,读它,它真棒)但是我遇到了一个实现问题,我想看看生成的代码是什么样的.我通常会使用反射器来查看代码,但在这种情况下,程序集是动态的,只在内存中.有没有办法将动态程序集保存到磁盘,以便我可以反映它们?
编辑/我的答案:
哇,花了一段时间才回到这个.不幸的是,我从原来的问题中留下了一点重要的一点.
重要的一点:我正在使用Ayende的RhinoDSL库,正如他在书中所建议的那样.我可以访问我的DslEngine子类中的boo编译器,如下所示:
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Run Code Online (Sandbox Code Playgroud)
要改变最少并获得我想要的东西我需要添加一行...
public class JobEngine : DslEngine
{
protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
{
compiler.Parameters.GenerateInMemory = false; // <--- This one.
pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
}
}
Run Code Online (Sandbox Code Playgroud)
这导致编译器将程序集输出到我的〜\ LocalSettings\Temp目录,然后我可以反映它.重要的是要注意,进行该更改会导致程序的其余部分中断(RhinoDSL无法再在内存中找到程序集,因为我将它们输出到磁盘),因此这仅用作调试工具.
我对ASP.NET编程比较陌生(但不是一般的编程),而且我一直在查看已经交给我的项目.在这个项目中,有一个bin目录,其中包含大量各种DLL文件.
然后,在web.conf文件中,在程序集结构内部(在XML中),添加了大量其他程序集.
我已经对SO和谷歌进行了一般性的搜索,我仍然在努力解决两者之间的差异.一种方式比另一方"更好"吗?可以提供的任何澄清将是最受欢迎的.
谢谢.
我在GAC中有"mycomp.myassembly.dll"但Load和LoadFrom会抛出找不到文件的异常,而LoadWithPartialName则返回null.我正在做以下事情:
AssemblyName name = new AssemblyName();
name.Name = "mycomp.myassembly.dll";
Assembly assembly = Assembly.Load(name);
Run Code Online (Sandbox Code Playgroud)
用于mycomp.myassembly.dll文件的FileNotFound失败,并且
Assembly assembly = Assembly.Load("mycomp.myassembly.dll");
Run Code Online (Sandbox Code Playgroud)
完全相同的消息失败了.
我仔细检查了汇编是否在GAC中(甚至再次使用gacutil/if)并且它在所有其他情况下都有效,我只是无法自己加载它.
我在这做错了什么?我错过了什么吗?
我可以将C#和C++/CLI源文件放在一个项目中,然后编译它们以获得单个.DLL程序集吗?
相反,有没有办法告诉它是否已启用或禁用优化参数编译.我不想知道它是发布还是调试,因为可以使用或不使用优化来启用它们.从我的角度来看,即使代码说它是发布版本,它是否真正优化了?谢谢.
我相信Visual Studio中有一个设置(或设置的组合),允许您在立即窗口(或输出窗口,我不记得哪个)中查看,在调试时加载的程序集的时间戳和名称.我曾经开启此功能,因为它对于查找性能问题区域非常有用.然而可悲的是,当VS最近决定解除我的所有窗口时没有任何理由,我不得不重置我的VS设置并且现在已经丢失了.
我无法找到我的生活,我已经开启了哪个设置.
任何帮助赞赏.
assemblies visual-studio-2008 visual-studio visual-studio-debugging output-window
让我们假设我们有两个程序集:
它是否对Foo.Application性能有影响(或有任何其他缺点)?
assemblies ×10
.net ×6
c# ×3
.net-2.0 ×1
.net-4.0 ×1
asp.net ×1
boo ×1
c++-cli ×1
dynamic ×1
gac ×1
include ×1
junit ×1
maven-2 ×1
optimization ×1
performance ×1
project ×1
reference ×1
release-mode ×1
trace ×1