Visual studio MsBuild和Visual Studio的不同结果
我有一个解决方案,它由两个项目组成:针对.NET 4.5+网站的常规类库(不是web应用程序)项目 当我使用Visual Studio构建此解决方案时,来自Nuget软件包和本地引用的所有引用程序集都会复制到网站项目的bin文件夹中 如果尝试使用MsBuild生成解决方案,则网站项目的MsBuild-bin文件夹不会收到任何程序集 未选择在VS配置中构建网站项目(在这两种情况下均通过消息报告) 编辑-以下是附加说明 当我从网站的git-bin文件夹克隆项目时,该文件夹仅包含4个已签入的程序集: 如果我将使用/t:Build或/t:Rebuild和/p:Configuration=Release运行msbuild命令;Platform=“Any CPU”-在我的另一个项目中,我只会收到postbuild事件的输出,包括在解决方案中: 然而,若我在Release/Debug config-bin中执行从VS(Ctrl+Shift+b)构建,那个么我就拥有运行web应用程序所需的所有程序集。 编辑2:链接到示例解决方案- 当使用Visual studio MsBuild和Visual Studio的不同结果,visual-studio,msbuild,Visual Studio,Msbuild,我有一个解决方案,它由两个项目组成:针对.NET 4.5+网站的常规类库(不是web应用程序)项目 当我使用Visual Studio构建此解决方案时,来自Nuget软件包和本地引用的所有引用程序集都会复制到网站项目的bin文件夹中 如果尝试使用MsBuild生成解决方案,则网站项目的MsBuild-bin文件夹不会收到任何程序集 未选择在VS配置中构建网站项目(在这两种情况下均通过消息报告) 编辑-以下是附加说明 当我从网站的git-bin文件夹克隆项目时,该文件夹仅包含4个已签入的程序集:
msbuild TestApp.sln/t:Rebuild/p:Configuration=Release构建它时;Platform=“Any CPU”
-这只会导致在~\Test.Web\bin\
(其中Test.Web是网站项目)找到Test.Core.*和LetsEncrypt.Umbraco.dll(最初签入)。如果使用VisualStudio 2015构建TestApp.sln(我想2013年和2017年是一样的)~\Test.Web\bin\将获得全部程序集
MsBuild和Visual Studio的不同结果
这是因为二进制文件旁边的bin文件夹中的alldll.refresh
文件被.gitignore
忽略
由于网站项目没有任何项目文件(.csproj)来放置程序集引用,因此MSBuild使用*.dll.refresh
文件来理解程序集引用。文件内容是通过解决方案的packages文件夹指向.dll
的相对路径。当您忽略所有这些.dll
.refresh by.gitignore
时,MSBuild无法理解如何处理dll
文件
为了测试这一点,我创建了一个网站项目,向其中添加一个nuget包,然后删除dll
文件,但保留.dll.refresh
文件在bin
文件夹中。通过MSBuild命令行生成网站项目:
msbuild.exe TestWebsite.sln /t:Rebuild
此命令完成后,dll
文件将复制到bin
文件夹
因此,构建和包还原要正常工作,您需要保留.dll。刷新bin文件夹中的文件。您可以从版本控制系统中删除其他二进制文件
注意:如果要恢复那些.dll.refresh
,可以使用Package Manager控制台中的命令行:
update-package -reinstall
希望这能有所帮助。您是否介意与我们共享github链接,以便我们重现此问题?请参阅最新版本2:)