2017-10-11 103 views
-1

我有一个解决方案,其中包括2个项目:.NET 4.5 +网站的常规类库(不是Web应用程序)项目。与MsBuild和Visual Studio不同的结果

当我使用Visual Studio构建此解决方案时,Nuget包和本地引用中的所有引用程序集都将复制到网站项目的bin文件夹中。

如果我尝试使用MsBuild构建解决方案 - 网站项目的bin文件夹未收到任何程序集。

网站项目没有选择要建在VS的配置(这是由消息在这两种情况下报道)

编辑 - 这里是额外的解释。

当我克隆从git的一个项目 - 网站的bin文件夹中只包含4已经检查了组件: Initial bin after clone

如果我将运行与MSBuild的命令/吨:建立或/ T:重建和/ p:配置=释放;平台=“任何CPU” - 我只会收到一个在我的其他项目postbuild事件的输出,包括在解决方案: After MsBuild

但是,如果我执行建立从VS(按Ctrl +Shift + b)在发布/调试配置 - 斌有运行Web应用程序所需的所有程序集。 After build in VS

编辑2:链接到例如溶液 - https://github.com/akuryan/csharp-website-test

当一个建立其与msbuild TestApp.sln /t:Rebuild /p:Configuration=Release;Platform="Any CPU" - 这会导致仅Test.Core *和LetsEncrypt.Umbraco.dll(最初签入)发现在。 ~\Test.Web\bin\(其中Test.Web是网站项目)。如果用VisualStudion 2015构建TestApp.sln(我想,2013和2017将是相同的) - ~\Test.Web\bin\可以获得全部程序集。

+0

你会介意与我们分享github链接,以便我们能够重现此问题吗? –

+0

查看最新的edit2 :) –

回答

1

用的MSBuild和Visual Studio

不同的结果,这是因为所有dll.refresh文件中旁边的二进制文件bin文件夹被.gitignore忽略。

由于Web站点项目没有任何项目文件(.csproj)来放置程序集引用,因此MSBuild使用*.dll.refresh文件来了解程序集引用。该文件的内容是通过解决方案的packages文件夹与.dll的相对路径。当您忽略所有那些.dll .refresh .gitignore时,MSBuild无法理解如何处理dll文件。

为了测试这个,我创建了一个网站项目,为它添加一个nuget包,然后删除dll文件,但将.dll.refresh文件保留在bin文件夹中。建立由MSBuild的命令行的网站项目:

msbuild.exe TestWebsite.sln /t:Rebuild 

此命令完成后,dll文件拷贝到bin文件夹。

因此,构建和包恢复工作,它看起来像你需要保持文件在bin文件夹。您可以从版本控制系统中删除其他二进制文件。

注意:如果你想获得这些.dll.refresh回来,你可以使用包管理器控制台的命令行:

update-package -reinstall 

希望这有助于。