在编译.Net程序集时,有什么方法可以访问用于TargetFrameworkVersion和/或TargetFrameworkProfile的值吗?
我正在谈论的值是包含项目文件的值
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OtherStuff>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<OtherStuff>
</PropertyGroup>
<OtherStuff>
</OtherStuff>
</Project>
Run Code Online (Sandbox Code Playgroud)
基本上我想知道编译程序集时框架的目标版本是什么,以及可能的目标框架配置文件.
我不是在谈论当前加载的CLR版本,Environment.Version不是我想要的.
理想情况下,解决方案将使用System.Reflection,但如果我必须采用其他方法,我会.
Parser Error Message: Could not load file or assembly 'MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The system cannot find the file specified.
...
Line 240: <providers>
Line 241: <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.7.4.0,
.....
Run Code Online (Sandbox Code Playgroud)
解决了将标记放在web.config文件中的以下行:
<remove name="MySQLMembershipProvider"/>
Run Code Online (Sandbox Code Playgroud)
我没有访问服务器设置来删除mysql.但还有另一种方法可以解决这个问题吗?
场景:我想创建作为资源程序集的附属程序集.该程序集仅在其中编译资源(ResourceWriter). 目标是在VS之外创建资源程序集,并将它们添加到应用程序中,并将其添加到我的C#应用程序中
Atm我正在使用AssemblyBuilder来创建程序集.它有效,但没有关于存储的程序集的信息.没有cultureinfo,密钥或其他任何东西.程序集不会使用Missing Manfifest Resource Exception.:(
如果可能的话,我想继续使用AssemblyBuilder或使用CodeDomProvider.
问题:为我的应用添加新的卫星组件有什么必要?是否有足够的文件夹(en-US)和带有en-US资源的程序集?
问题2:是否可以向程序集提供一些元信息,如版本,文化?
问题3:是否足以将资源添加到程序集中?
码:
AssemblyBuilder builder = AppDomain.CurrentDomain.DefineDynamicAssembly(
assemblyName, AssemblyBuilderAccess.RunAndSave, resourceFolder);
builder.AddResourceFile(name, assemblyFileName);
builder.Save(assemblyName.Name);
Run Code Online (Sandbox Code Playgroud)
对于任何形式的帮助,我将不胜感激.提前致谢
我希望以一种格式提供这些版本
像这样.. {Major}.{Minor}.{Build}.{patch}
如何在团队城市的程序集信息修补程序中设置它?
这样它每次构建时都会自动增加版本...
我想要一些指导和帮助...?!?
我一直在寻找,但我没有找到任何合适的答案.我注意到我的防病毒软件开始将我的应用程序检测为木马.我的防病毒软件是卡巴斯基2013,这是它检测到的木马类型. http://www.securelist.com/en/descriptions/HEUR:Trojan.Win32.Generic
我的应用程序只做了3件事:
检查加密狗密钥是否已连接到计算机
使用加密狗密钥解密dll(具有自定义入口点的wpf类库)
通过自定义入口点启动dll.
问题是类似的代码在类似的应用程序中工作,但在这种情况下,我的防病毒软件将其检测为木马.我注意到有问题的代码部分是这样的:
public static void ExecuteAssembly(byte[] Bytes)
{
Assembly a = Assembly.Load(Bytes);
foreach (Type type in a.GetTypes())
{
try
{
MethodInfo main = type.GetMethod("Main");
if (main != null)
main.Invoke(type, new object[] { });
}
catch { }
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能避免这个问题?我没有做木马,我无法避免使用这部分代码来启动我的dll.所以我认为代码不是问题.提前致谢.
马蒂亚
编辑:
我已将文件上传到Egor告诉我的网站.这是结果. https://www.virustotal.com/en/file/7ee30172ffda51f4b99700d10df2816403cbdc8f17bfe90f7deef81a88639da3/analysis/1369058630/
你能给我什么建议?要将文件提交为误报或不同的更改代码?我是这类问题的新手,所以我不知道该怎么做.再次感谢!
我们希望使用NuGet在我们组织的开发人员之间共享程序集.我们目前正在设置三个NuGet源,如下所示:
不应将开发人员机器上的本地构建发送到任何这些源.只有构建服务器完成的构建才能执行这些操作.我们的构建服务器执行三种不同类型的构建,具体取决于分支,Development,QA和Release分支.其中每个都具有相应的构建配置,可在源更改时触发.在构建时,每个构建器都会将构建的组件 - nuget-packages推送到相应的feed.Development-builds将在版本中添加"-dev".QA版本将为版本添加"-qa",而版本版本将具有"纯"版本号.
现在,问题:
什么是开发人员控制使用什么包的最佳解决方案?我想dev手动必须编辑依赖源param以显式定义从哪个feed获取程序集:有时你想要发布程序集,有时你需要QA程序集,有时你甚至想要最前沿的开发版本.
我们还在考虑将本地构建包推送到每个开发者自己的机器上的本地私有源,以帮助加速构建.就哪些饲料来说,这会有问题吗?
如果这些定义是由依赖项文件中的dev(也必须是版本控制的)创建的,那么当源被提交到repo时,该设置将被带入Development feed(与开发人员相同的构建焦点,只是与他人分享).这可能是也可能不是开发Feed的正确之处?
当源被合并到qa-branch时,依赖关系中定义的提要仍然与开发者一样,可能从Development feed获取程序集.对于QA版本,我认为这可能不是我们想要的.QA版本应该仅限制发布程序集的订阅源,因为您希望查看更改是否按照发行版组件的预期工作.您不希望使用其他"未经测试"的QA程序集对其进行测试.这对其他人也有意义吗?
在发布分支中,发布版本应该只使用发布供稿程序集,我想?我有一种感觉,可能会就此达成共识,所以也许根本不是一个问题:).
因此,总结一下建议的过程......在构建期间,我们将:
作为旁注,QA订阅源实际上不会被任何其他版本使用.但是,质量保证部门将使用它们,因为他们将使用这些进行测试.
给定一个加载Assembly是否有一种方法(在代码中)来确定它被加载到的3个加载上下文中的哪一个(默认的Load,LoadFrom或Neither)?
在Suzanne Cook的"选择绑定上下文"一文中,将程序集加载到LoadFrom时会出现一些缺点.特别是,我的库使用反序列化并遇到InvalidCastException加载到LoadFrom上下文时.
目前我的库失败很晚(它在执行有问题的反序列化代码时失败 - 请参阅我的示例).在这些情况下,我想通过检测加载的上下文并在未加载到默认Load上下文时抛出异常来使其失败.
我正在寻找有关.NET应用程序何时以及如何共享加载程序集的更多详细信息.我有兴趣在OS进程之间共享,也在同一进程内的AppDomains之间共享.共享程序集通过避免在内存中具有相同程序集的多个副本来减少系统内存使用量,我认为这是主要的好处,但有兴趣知道是否存在其他好处和/或影响.
到目前为止我学到的内容摘要......
Sysinternals进程资源管理器可用于列出.NET进程的AppDomain以及加载到每个AppDomain中的程序集.
.NET进程似乎总是将"核心"程序集加载到名为"SharedDomain"的AppDomain中(假设这在当前进程中的AppDomain之间共享是合理的).
任务管理器和Process Explorer报告"工作集共享"和"工作集可共享"的内存使用数量不是无关紧要,但不清楚共享的内容.(它是共享AppDomain中的'核心'程序集吗?其他[非核心]程序集是否也共享?
在一个简单的测试中,我推出了两个独立的.NET应用程序副本,并为每个应用程序附加了一个Visual Studio调试器."模块"视图显示已加载的程序集及其在内存中的地址.在我的测试用例中,每个加载的模块都位于两个进程中的相同地址.(这是否表示共享,或者这个虚拟地址空间是否必须共享?)
ASP.NET 4.5通过一个叫做装配实习机制支持组件的共享(见看在ASP.NET 4.5共享通用组件,分享共同组件,与aspnet_intern.exe共享通用组件).它似乎通过设置文件系统符号链接(符号链接)来工作,以便不同的Web应用程序指向共享bin文件夹,因此这就提出了一个问题,即ASP.NET是否只是使用符号链接来触发.NET中的标准程序集共享行为,或者是否有更具体的ASP.NET和IIS AppPools正在进行.
注意.在安装了Visual Studio 2013的计算机上,可以在以下位置找到aspnet_intern.exe:
C:\ Program Files(x86)\ Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1工具\
在更高版本的.NET和Windows Server中,ASP.NET启动时间和内存使用情况有了进一步的改进; 请参阅ASP.NET应用程序暂停 - 响应式共享.NET Web主机,.Net 4.5中的ASP.NET共享主机方案的性能改进,但我不确定这些更改与此问题的相关性如何.
ASP.NET程序集共享也包含在.NET 4.5简介中.
还想知道JITted代码是否共享,因为加载的程序集由MSIL,资源,元数据等组成,并且当代码被JIT时必须分配更多内存.
在紧凑框架中也有关于汇编共享的讨论(我们相信共享,MSDN博客,Abhinaba Basu)
--- UPDATE ---
我使用sysinternals VMMap工具来检查两个AppPools,一个用asp.net程序集internign设置,另一个没有.我还"触摸"了一个测试aspx页面,导致ASP.NET加载所有程序集(并且global.asax运行少量代码,因此导致一些JITting).
报告的两个AppPools的内存使用数据非常相似,工作集,WS Private和WS Shareable基本相同.但是,在"实习"AppPool中,WS Shared要大得多.这是意外的(对我来说),因为没有其他进程可以与之共享,但VMMap显示的是内存块(标记为'.text'并具有执行/读保护),这些内存块在实习AppPool中显示为共享内存,而另一个AppPool中的相同程序集不共享.我对此的解释是,进程中的虚拟内存块被映射到同一物理内存,然后报告为"WS Shared".
ASLR
关于装配空间布局随机化.VMMap工具显示许多类型为"Image(ASLR)"的内存块.ASLR随机化了内存中程序集的位置以阻止恶意软件,我想知道这是否会阻止程序集实习工作正常.使用EMET工具禁用机器的ASLR 会导致程序集地址更加规则,但不会更改报告的内存数,因此它似乎不会影响程序集实习.值得注意的是VMMap仍然显示带有'ASLR'的图像,我怀疑这只是意味着装配/图像被标记为支持/允许ASLR,而不是ASLR生效.
我正在移植.NET 3.5 - 4.5中的一些代码.在我的程序集内部,我有一些代码从当前正在执行的程序集中读取资源.但是,DNX核心5.0中GetExecutingAssembly()的Assembly类型不是方法.
var xsdStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(xsdPath);
Run Code Online (Sandbox Code Playgroud)
Assembly.GetExecutingAssembly()在DNX核心5.0中相当于什么?或者,如果我需要一个命名空间来获取该方法(也许是扩展方法?),那么命名空间是什么?
我使用SQLServer程序集运行我的Winforms应用程序Microsoft.SqlServer.ConnectionInfo(13.100.0.0)Microsoft.SqlServer.SMO(13.100.0.0)
在同一台机器上安装了SSMS 2016(Aug).这里也安装了SQL 2014开发版.
当我运行我的应用程序时,它给了我一个错误:
?onnection = new ServerConnection(instanceName);
------------
Could not load file or assembly ‘microsoft.sqlserver.sqlclrprovider version=13.100.0.0?
Run Code Online (Sandbox Code Playgroud)
我检查过:GAC包含一些这样的程序集11,12,13.0.0.0,但是没有13.100.0.0.
该应用程序已从以下引用程序集:C:\ Program Files(x86)\ Microsoft SQL Server\130\DTS\Tasks
Microsoft.SqlServer.ConnectionInfo (13.100.0.0)
Microsoft.SqlServer.SMO(13.100.0.0)
Run Code Online (Sandbox Code Playgroud)
我的操作系统是Windows 7,我认为所有13.100.0都是由SSMS安装程序安装的.如何解决这个问题呢?我可以找到程序集microsoft.sqlserver.sqlclrprovider 13.100.0.0吗?
.net-assembly ×10
.net ×4
c# ×4
appdomain ×1
asp.net ×1
asp.net-core ×1
build ×1
console ×1
dll ×1
dnx ×1
dynamic ×1
mysql ×1
nuget ×1
reflection ×1
resources ×1
smo ×1
sql-server ×1
teamcity ×1
versioning ×1