小编Mic*_*ski的帖子

警告MSB3276 - 发现同一依赖程序集的不同版本之间存在冲突

我的解决方案包含多个项目并编译好.我正在使用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.

任何帮助将非常感激.

.net msbuild nuget

41
推荐指数
1
解决办法
2万
查看次数

带MemoryStream的FileResult给出空结果..问题是什么?

我正在使用一个库来生成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)

c# asp.net-mvc

20
推荐指数
1
解决办法
6959
查看次数

运行时类型而不是C#单元测试中的类型

在我的一个单元测试中,我想检查所有公共方法是否都返回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

.net c# reflection asp.net-mvc unit-testing

7
推荐指数
1
解决办法
2404
查看次数

NuGet更新和条件引用

我们的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的条件引用?任何建议将不胜感激!

.net msbuild nuget

6
推荐指数
1
解决办法
1978
查看次数

ASP.NET MVC + LINQ异常

我有一个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)

c# linq asp.net asp.net-mvc linq-to-sql

5
推荐指数
2
解决办法
2516
查看次数