C# MsBuild忽略引用DLL并在生成服务器上添加额外文件

C# MsBuild忽略引用DLL并在生成服务器上添加额外文件,c#,reference,msbuild,package,C#,Reference,Msbuild,Package,在从命令行使用MsBuild时,我发现了几个问题,我认为它们都是相关的。它们也有单独的线程。问题出现在VS2013中创建的MVC项目中 首先-问题出在哪里。 我的bin文件夹包含几个“*.npl”文件+一些额外的DLL 当项目A引用项目B(它引用某些第三方dll)时,dll不在包中(或者至少在部署后不在服务器上),但是log4net也不在项目A中引用,而仅在项目B中引用,但它被复制到bin(和包)中 环境和设置 我的run命令如下所示: msbuild projectA.csproj /p:Co

在从命令行使用MsBuild时,我发现了几个问题,我认为它们都是相关的。它们也有单独的线程。问题出现在VS2013中创建的MVC项目中

首先-问题出在哪里。

  • 我的bin文件夹包含几个“*.npl”文件+一些额外的DLL
  • 当项目A引用项目B(它引用某些第三方dll)时,dll不在包中(或者至少在部署后不在服务器上),但是log4net也不在项目A中引用,而仅在项目B中引用,但它被复制到bin(和包)中
  • 环境和设置 我的run命令如下所示:

    msbuild projectA.csproj /p:Configuration=Release /p:Platform=AnyCpu /p:VisualStudioVersion=12.0 /T:Build
    
    我的计算机正在运行Win 8.1,并安装了最新更新VS2012 MSBuild(4.0.30319.33440)。服务器运行安装了VS2013的Windows Server 2008 RC2,并略微更新了MSBuild(4.0.30319.34209)

    它的行为 在本地计算机上,当我运行此命令时,生成运行正常。当我打开bin文件夹时,我可以看到我的第三方DLL(包括log4net),没有额外的文件。一切都很好

    当我在服务器上运行此命令时,同一个bin文件夹现在缺少我的第三方dll(但有log4net!),并且还有一些*.nlp文件和mscorlib.dll。构建本身返回9个警告,主要是以下警告:

    项目的处理器体系结构不匹配 正在构建的“MSIL”和参考的处理器体系结构 “{有几个系统}”,“AMD64”

    还有一条警告抱怨SDK丢失。重要的是要注意,我可以通过在命令后面附加这一行来解决这些警告和上面的问题1(npl文件..)

    /p:FrameworkPathOverride="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
    
    也许最奇怪的是,log4net工作正常,但我的第三方DLL却不行。我查了csproj文件。ProjectA没有对log4net的引用。只有projectB引用它。它们的引用完全相同(我在记事本中查看了csproj)。只有两个区别,log4net是使用nuget安装的,log4net也是在projectA的web.config中配置的

    当我在互联网上搜索时,我发现这些问题存在于不同的线程中,解决方案通常是通过向项目添加一些额外设置、编辑csproj、sln、注册表等。我不喜欢这些解决方案。特别是,当构建在本地机器上完美运行时

    问题是-为什么服务器需要指定frameworkPath?为什么它仍然没有复制一些第三方DLL?为什么log4net工作?最重要的是-为什么它在我的本地机器上工作,而不是在服务器上工作?

    更新-解决方案2。问题 看来我有办法解决第二个问题了。GAC中引用了第三方dll。基于此,msbuild似乎无法处理此问题。将True添加到引用本身()没有帮助。最后,我不得不将第三方dll上的引用添加到projectA中,并添加私有标记。现在它起作用了


    这更像是热修复,而不是解决方案。我没有时间做这个。。如果有人找到了一个真正的固溶体,那就太棒了!:-)

    你找到了答案。GAC有时会让你大吃一惊……就是这样。