我的解决方案包含多个项目并编译好.我正在使用nuget,我使用的其中一个软件包是log4net.2.0.0.我最近将软件包更新到log4net.2.0.3,并确保在每个属于该解决方案的项目中,引用都会更新.不幸的是,在编译过程中我仍然收到以下警告:
(ResolveAssemblyReferences目标) - > C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targe ts(1635,5):警告MSB3276:发现同一依赖程序集的不同版本之间存在冲突.请在项目文件中将"AutoGenerateBindingRedirects"属性设置为true.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId = 294190.
使用/ verbosity编译时,或者更详细的警告版本:详细
考虑从版本"1.2.11.0"[]到版本"1.2.13.0"[Z:\ xxx\packages\log4net.2.0.3\lib \]的app.config重新映射程序集"log4net,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a" net40-full\log4net.dll]解决冲突并摆脱警告.C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5):警告MSB3276:发现同一依赖程序集的不同版本之间存在冲突.请在项目文件中将"AutoGenerateBindingRedirects"属性设置为true.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=294190.[Z:\ xxx\xxx\xxx\xxx.csproj]
AssemblyFoldersEx位置:"{Registry:Software\Microsoft.NETFramework,v4.5,AssemblyFoldersEx}"
我理解它意味着什么,遗憾的是我无法追踪哪个项目/库仍然引用旧版本的log4net.我知道我可以通过简单地重新映射到app.config来掩盖警告,但它似乎在地毯下扫除问题而不是实际解决它.
在我的解决方案中我追踪旧版log4net的最佳方法是什么?我已经尝试了所有显而易见的事情,包括搜索所有文件的版本号.我还确保没有其他nupkgs将依赖项设置为此特定版本的log4net.
任何帮助将非常感激.
我正在使用一个库来生成ics文件(iCalendar或RFC 2445,或者你称之为),这些库将内容序列化为MemoryStream,或者实际上是任何类型的流.
这是我的一大堆代码:
public ActionResult iCal(int id) {
MyApp.Event kiEvt = evR.Get(id);
// Create a new iCalendar
iCalendar iCal = new iCalendar();
// Create the event, and add it to the iCalendar
DDay.iCal.Components.Event evt = iCal.Create<DDay.iCal.Components.Event>();
// Set information about the event
evt.Start = kiEvt.event_date;
evt.End = evt.Start.AddHours(kiEvt.event_duration); // This also sets the duration
evt.Description = kiEvt.description;
evt.Location = kiEvt.place;
evt.Summary = kiEvt.title;
// Serialize (save) the iCalendar
iCalendarSerializer serializer = new iCalendarSerializer(iCal);
System.IO.MemoryStream fs = new System.IO.MemoryStream();
serializer.Serialize(fs, System.Text.Encoding.UTF8); …Run Code Online (Sandbox Code Playgroud) 在我的一个单元测试中,我想检查所有公共方法是否都返回ActionResult类型.这是我的测试方法:
[TestMethod]
public void Public_Methods_Should_Only_Return_ActionResults()
{
MethodInfo[] methodInfos = typeof(MyController).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach (MethodInfo methodInfo in methodInfos)
{
Assert.IsInstanceOfType(methodInfo.ReturnType, typeof(System.Web.Mvc.ActionResult));
}
}
Run Code Online (Sandbox Code Playgroud)
这个测试爆炸了MyController的第一个方法:
[Authorize]
public ActionResult MyList()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
Assert.IsInstanceOfType failed. Expected type:<System.Web.Mvc.ActionResult>. Actual type:<System.RuntimeType>.
Run Code Online (Sandbox Code Playgroud)
当我在Assert上设置断点并检查methodInfo.ReturnType时,它的类型为Type,它是ActionResult.
任何人都可以解释为什么测试正在爆炸以及如何使其发挥作用?
先谢谢,MR
我们的nupkg包包含相同dll的多个版本(x86,x64,AnyCPU),在csproj文件中,在引用中我使用条件引用来根据当前平台集选择特定的dll.因此,我有多个对同一个库的引用(只是不同的平台编译).
这是我的csproj文件的一个片段:
<Reference Include="xxxx" Condition="'$(Platform)'=='x86'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='x64'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x64\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='AnyCPU'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\AnyCPU\xxxx.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
这种结构在MSBuild和Visual Studio中都能很好地工作.
不幸的是,在nuget更新之后,csproj引用搞砸了.这是结果:
<Reference Include="xxxx" Condition="'$(Platform)'=='x86'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='x64'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x64\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx">
<HintPath>..\..\packages\xxxx.2.7.0.1094\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
所以看起来只有一个引用被更新了...... 条件部分被删除以及列表中的第一个dll被使用了.
不是我所期待的.任何想法如何最好地解决这个问题?任何人在你的csproj中使用带有nuget的条件引用?任何建议将不胜感激!
我有一个ASP.NET MVC应用程序,99.9%的时间都很好用.一旦陷入蓝色的月亮,虽然事情确实出现了问题,但我想知道是否有人可以对这里可能出现的问题有所了解.
Web应用程序使用Linq2SQL并在以下一组指令后在控制器中爆炸:
const int pageSize = 5;
var allHeadings = artRepository.FindAllVisibleHeadings();
var paginatedHeadings = new PaginatedList<Article>(allHeadings, id ?? 0, pageSize);
Run Code Online (Sandbox Code Playgroud)
allHeadings只包含文章所有可见标题的IQueryable列表,而PaginatedList负责从这个很长的列表中取出一个合适的块.它如下:
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}
Run Code Online (Sandbox Code Playgroud)
它会在source.Count()行上爆炸,所以当它计算db中的所有可见文章时.有趣的是,当我多次重新加载页面时,我得到两种不同的例外:
第一:序列包含多个元素
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression …Run Code Online (Sandbox Code Playgroud) .net ×3
asp.net-mvc ×3
c# ×3
msbuild ×2
nuget ×2
asp.net ×1
linq ×1
linq-to-sql ×1
reflection ×1
unit-testing ×1