为什么在NuGet包更新期间,NuGet会将带有assemblyBinding的app.config添加到LIBRARY项目中?
只有在可执行文件的项目中才需要这些信息吗?
如何禁用此文件创build?
NuGet 2.8
编辑
库项目是NuGet 2.7中的exception,通过修复此问题,行为发生了变化: http : //nuget.codeplex.com/workitem/3827 with commit: http : //nuget.codeplex.com/SourceControl/changeset/448652d028e3f01ba4022e147baaf4e1fb3f969b
程序集绑定redirect在类库中与在可执行项目中一样有效。
想想这个; 在构build应用程序时,编译器将如何知道使用哪个版本的引用程序集(用于类库)?
通常情况下,这种方法可以很好地工作,没有redirect,但是当你偶然碰到装有GAC版本的机器的机器时,你可能会遇到麻烦。
我build议你阅读程序集绑定redirect文档,以更好地理解它是什么和做什么。
NuGet添加了redirectapp.config来帮助你,坦率地说,我没有得到一个额外的app.config一切工作如预期fuzz。
截至今天,它将增加redirect到所有项目,除了以下types:
- 维克斯
- JS
- Nemerle
- C ++
- Synergex公司
- 视觉工作室
- Windows商店应用程序
据我所知,没有办法解决这个问题。 如果这是一个问题,您可以在CodePlex上创build一个问题。
可以在这里find添加程序集绑定redirect的源代码。
我创build了一个小控制台应用程序,检查app.config文件的所有date,然后自动从.csproj和文件中删除它们。 待办事项:从tfs删除。 也许这可能有帮助。
class Program { private static string RootFolder; private static string AppConfigName; private static bool AskConfirmation = true; static void Main(string[] args) { try { AppConfigName = "app.config"; RootFolder = @"<Your project path>"; ScanDir(RootFolder); Console.WriteLine(); Console.WriteLine("DONE!"); Console.WriteLine("Press ENTER to finish..."); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } private static void ScanDir(string directoryParent) { var dirs = Directory.GetDirectories(directoryParent); foreach (var dir in dirs) { var dirInfo = new DirectoryInfo(dir); if (dirInfo.Name == "bin" || dirInfo.Name == "obj" || dirInfo.Name == "debug" || dirInfo.Name == "tempPE" || dirInfo.Name == "java" || dirInfo.Name == "res") continue; var files = Directory.GetFiles(dir, "app.config"); if (files.Length == 0) { ScanDir(dir); continue; } Process(dir); //ScanDir(dir); } } private static void Process(string dir) { var fi = new FileInfo(Path.Combine(dir, AppConfigName)); if (fi.CreationTime.Date != DateTime.Now.Date) return; if (AskConfirmation) { Console.WriteLine("Scan " + dir.Replace(RootFolder, "")); Console.Write("Remove (y)es or (n)o ?"); var key = Console.ReadKey(); Console.WriteLine(); if (key.Key.ToString() =="Y") // remove app.config RemoveAppConfig(dir, fi); } else RemoveAppConfig(dir, fi); } private static void RemoveAppConfig(string dir, FileInfo fi) { var csProjs = Directory.GetFiles(dir, "*.csproj"); foreach (var csProj in csProjs) { var txt = File.ReadAllText(csProj); txt = Regex.Replace(txt,"<None Include=\"App.Config\" />", "",RegexOptions.IgnoreCase); File.Delete(csProj); File.WriteAllText(csProj, txt); } File.Delete(fi.FullName); // todo: undo in tfs Console.WriteLine("Deleted"); } }