我们在Win Forms项目中遇到了一个非常有趣的问题.它已经解决了.我们知道发生了什么,但我们想知道它为什么会发生.这可能有助于将来遇到类似问题的其他人.
WinForms项目在我们客户的两台PC上失败了.该错误是一个模糊的kernel.dll错误.该项目在另外3台PC上运行良好.
我们发现我们的发布文件夹中缺少.DLL(log4net.dll - 一个非常流行的开源日志库).它以前在我们的发布文件夹中.为什么在最新版本中缺少它?
它丢失了,因为我必须在我的开发盒上安装了一个程序,该程序使用了log4net.dll,并将其添加到全局程序集缓存中.
当我检查解决方案对log4net.dll的引用时,它们被更改为"copy local = FALSE".它们必须自动更改,因为我的GAC中存在log4net.dll.
这是我的问题开始的地方:
为什么我对log4net.dll的引用从COPY LOCAL = TRUE更改为COPY LOCAL = FALSE?我怀疑是因为它是由另一个程序添加到我的GAC中的.
我们怎样才能防止这种情况再次发生?现在,如果我安装一个使用公共库的软件并将其添加到我的GAC,那么引用该DLL的我的SLN将从Copy Local TRUE更改为FALSE.
public class MyItem
{
public string Name { get; set; }
public IList<MyItem> ListByName(string name)
{
IList<MyItem> myItems = new List<MyItem>();
myItems.Add(new MyItem() { Name = "Item 1" });
myItems.Add(new MyItem() { Name = "Item 2" });
myItems.Add(new MyItem() { Name = "Item 3" });
myItems.Add(new MyItem() { Name = "Item 3" });
return (IList<MyItem>) myItems.Select(i => i.Name == name);
}
}
Run Code Online (Sandbox Code Playgroud)
我最初得到了一个强制转换异常(IEnumerable to IList),并且显式转换在这里不起作用.
我的目标是返回一个IList,其中MyItem.Name属性等于方法的参数.
这里几个问题:
我应该使用"选择","在哪里",或者两者都不在这里?
在这里返回过滤后的IList的正确方法是什么?