当运行prorgam时,我似乎错过了一个库,当我启动项目的输出时,我在启动时遇到异常.
A first chance exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll
An unhandled exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll
Additional information: A procedure imported by 'my assembly, Version=xx.1.1.0, Culture=neutral, PublicKeyToken=7292581204d9e04a' could not be loaded.
'ScriptX.vshost.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', No symbols loaded.
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何确定哪个库丢失,因为此时我无法看到传递给的值:
mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x3a bytes
Run Code Online (Sandbox Code Playgroud) 我正在尝试理解C#中的内部访问修饰符.我似乎无法理解装配是什么,以及我的程序的哪个部分保存在该装配中.我试图使它变得只有以下命名空间中的对象可访问变量:
namespace Engine.Entity
Run Code Online (Sandbox Code Playgroud)
有问题的变量是在该命名空间内的类中定义的,所以我假设如果我将其设置为内部,则只有该命名空间内的对象才能访问它.我看到程序集和名称空间是一体的,我不认为这是正确的.
在我的应用程序中,我需要在鼠标单击时显示一个表单.问题是表单在另一个程序集中,并且由于程序集加载的惰性,很可能在按下鼠标按钮时尚未加载程序集.因此,在表单最终出现之前,我所拥有的是非常明显的暂停.
通过调用new FormFromAnotherAssembly()我的初始化方法,我能够得到一个愚蠢的修复.那当然是照顾好事情,停顿不再存在,但它非常难看.我唯一喜欢这个解决方案的是,如果我想使用类似的东西,我不必弄乱我必须要做的路径和程序集名称Assembly.Load.
那么,如果我想确保在实际需要之前加载程序集,那么选择好的,强大的解决方案是什么?
提前致谢.
您通常如何分离代码库和相关的单元测试?我知道有人为单元测试创建了一个单独的项目,我个人觉得这个项目令人困惑且难以维护.另一方面,如果您将代码及其测试混合在一个项目中,您最终会得到与您的单元测试框架(无论是NUnit,MbUnit还是其他任何内容)相关的二进制文件以及您自己的二进制文件.
这对于调试很好,但是一旦我构建了发布版本,我真的不希望我的代码再次引用单元测试框架.
我找到的一个解决方案是将所有单元测试都包含在#if DEBUG - #endif指令中:当没有代码引用单元测试程序集时,编译器足够聪明,可以省略编译代码中的引用.
有没有其他(可能更舒适)的选择来实现类似的目标?
我已经定义了一个个性化的jar-with-dependencies程序集描述符.但是,当我使用mvn assembly:assembly执行它时,我得到:
...
[INFO] META-INF/ already added, skipping
[INFO] META-INF/MANIFEST.MF already added, skipping
[INFO] javax/ already added, skipping
[INFO] META-INF/ already added, skipping
[INFO] META-INF/MANIFEST.MF already added, skipping
[INFO] META-INF/maven/ already added, skipping
[INFO] [assembly:assembly {execution: default-cli}]
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error reading assemblies: No assembly descriptors found.
Run Code Online (Sandbox Code Playgroud)
我的jar-with-dependencies.xml位于src/main/resources/assemblies /中.
我的汇编描述符如下:
<?xml version='1.0' encoding='UTF-8'?>
<assembly>
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<dependencySets>
<dependencySet>
<scope>runtime</scope>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>**/LICENSE*</exclude>
<exclude>**/README*</exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>
<fileSets> …Run Code Online (Sandbox Code Playgroud) 概述:我有兴趣了解更多关于.NET4"进程内并行执行"的程序集,并需要其他信息来帮助我揭开它的神秘面纱.
动机:有问题的应用程序是针对.NET2构建的,并使用两个也可以对抗.NET2的第三方库.应用程序部署(通过文件复制)到包含.NET2的虚拟环境中的客户端计算机. 不是我的建筑,请耐心等待.
目标:要查看是否有可能像以前一样重新构建应用程序组件(或子集)对.NET4并销售应用程序,而无需改变第三方库和包括.NET4客户端配置文件(如描述这里的部署) .
采取的步骤:阅读了以下文章,但没有提供足够的信息:
进程内并行执行:浏览本文,方案二是最接近描述类似于我的情况的东西,但并没有真正涵盖任何深度.
ASP.NET并行执行概述:本文涉及Web应用程序,但我正在处理客户端WinForms应用程序.
CLR团队博客:进程内并排:这有助于解释.NET4下托管进程的插件是如何运行的,但我不知道这是否适用于第三方库.
进一步的步骤:我也不清楚如何继续将单个.NET2程序集升级到.NET4,可执行文件保留在.NET2中(即如何配置解决方案/项目文件,如果需要包含任何特殊代码,等等).
我已经进行了大约一年的.NET开发,但我仍然不知道该<assemblies>部分的目的是什么.
该部分的目的是什么?我可以删除那里指定的程序集吗?我问过团队中的一些高级开发人员,但他们只是告诉我要忽略它.有人可以给我一个很好的解释吗?
如何在不添加绑定到app.config的情况下确定修改此引用的位置?
Consider app.config remapping of assembly "System.Runtime.Serialization.Primitives, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" from Version "4.1.1.0" [] to Version "4.1.2.0" [F:\Production\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll] to solve conflict and get rid of warning.
12>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3247: Found conflicts between different versions of the same dependent assembly. In Visual Studio, double-click this warning (or select it and press Enter) to fix the conflicts; otherwise, add the following binding redirects to the "runtime" node in the application configuration file:
我有一个程序集Foo,它引用了程序集栏(版本XXX2000).在属性中,特定版本设置为False.我的本地GAC中有Bar(xxx2000)和Bar(xxx1000).一切都好.
在另一台机器上,GAC中没有Bar的版本,但Bar(xxx1000)与Foo位于同一目录中,运行Foo将失败,声称无法找到Barr(xxx2000)
无法加载文件或程序集'Bar,Version = xxx2000,Culture = neutral,PublicKeyToken = YXYXYXYXXYX'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
不应该使用Bar(xxx1000),因为特定版本设置为False或我错过了什么?
也许我没有得到具体版本的确如何运作.
关于Stack Overflow的特定版本引用还有一些其他问题,但没有一个对我有任何帮助.
编辑
进一步阅读:http://www.code-magazine.com/article.aspx?quickid = 0507041&page = 3
在C#中,您可以将文件放在与其命名空间相对应的文件夹中,并在解决方案资源管理器中查看它们.
在F#中,似乎我必须将所有内容放在简单有序的列表中进行编译.当我达到~300级的规模时,它会让人感到有些困惑和混乱,我开始羡慕C#,并认为它可能是类型推断的代价.
有没有比拆分成几个组件更好的选择?
由F#编译器的源来看它的路线,他们已经采取,但我有互联组件(控制器视图,> 300类 - - 视图模型)的相当大的系统,我想是因为在循环依赖的一个组件,即使在接口水平.
我应该忘记一个文件 - 一个类并创建一些巨大的文件?(例如,在F#编译器中,您有几个100kb到300kb范围内的源文件,并且有些自动生成1Mb左右!)
您对大型F#项目的体验是什么?
assemblies ×10
c# ×6
.net ×4
reference ×2
.net-4.0 ×1
asp.net-mvc ×1
c#-to-f# ×1
debugging ×1
f# ×1
internal ×1
maven-2 ×1
nuget ×1
plugins ×1
process ×1
reflection ×1
unit-testing ×1
web-config ×1