MSBuild 不在 Bin 目录中创建 DLL

Posted

技术标签:

【中文标题】MSBuild 不在 Bin 目录中创建 DLL【英文标题】:MSBuild not creating DLL's in Bin directory 【发布时间】:2021-06-27 00:21:00 【问题描述】:

我们在本地使用 ADO 2019,并且我们有一个构建服务器,我们可以在其中构建所有内容。我有一个 ASPNet 网页,开发人员已将第二个项目添加到 SLN 进行测试。 我收到以下错误

XYZ.Tests\Properties\PexAssemblyInfo.cs(15,12): Error CS0246: The type or namespace name 'PexAssemblySettingsAttribute' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(15,12): Error CS0246: The type or namespace name 'PexAssemblySettings' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(18,12): Error CS0246: The type or namespace name 'PexAssemblyUnderTestAttribute' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(18,12): Error CS0246: The type or namespace name 'PexAssemblyUnderTest' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(19,12): Error CS0246: The type or namespace name 'PexInstrumentAssemblyAttribute' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(19,12): Error CS0246: The type or namespace name 'PexInstrumentAssembly' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(20,12): Error CS0246: The type or namespace name 'PexInstrumentAssemblyAttribute' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(20,12): Error CS0246: The type or namespace name 'PexInstrumentAssembly' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(21,12): Error CS0246: The type or namespace name 'PexInstrumentAssemblyAttribute' could not be found (are you missing a using directive or an assembly reference?)
XYZ.Tests\Properties\PexAssemblyInfo.cs(21,12): Error CS0246: The type or namespace name 'PexInstrumentAssembly' could not be found (are you missing a using directive or an assembly reference?)

主项目的Bin 目录中有需要的Dll,但第二个项目的Bin 目录中没有文件。

我的 MSBuild 参数如下

/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:PrecompileBeforePublish=true 
/p:DeployDefaultTarget=WebPublish 
/p:publishUrl="$(build.artifactstagingdirectory)\$(BuildConfiguration)\wwwroot"  
/p:OutDir="\Bin\$(BuildConfiguration)"

我曾尝试使用 .csproj 预构建测试应用程序,但由于它自己没有失败的 SLN。 所有 Nuget 包都在 Packages 目录中,但我继续收到这些错误。我只是不知道它从哪里想要什么。

【问题讨论】:

【参考方案1】:

进行新更改后,您是否尝试在本地计算机上的 Visual Studio 中构建和测试您的项目?是否出现同样的错误?

该错误通常是由于未找到程序中使用的类型或命名空间引起的。您可能忘记引用包含该类型的程序集,或者您可能没有添加所需的 using 指令。或者,您尝试引用的程序集可能存在问题。更多详情可以查看“Compiler Error CS0246”。

您可以在本地机器上的 Visual Studio 中尝试以下步骤,看看是否可以解决错误:

    更正命名空间的名称。您可以使用下拉菜单“Intellisense”,也称为“Auto-complete”。

    修复创建的自定义命名空间。

以下是类似问题的几张票作为参考。

Getting "type or namespace name could not be found" but everything seems ok? https://www.codeproject.com/Questions/5277362/Csharp-the-type-or-namespace-name-could-not-be-fou

[更新]

如果 DLL 是您的一些自定义或私有引用,要在 Azure DevOps 上的 Azure Pipelines 中构建项目时使用此 DLL,我建议您可以将这些 DLL 作为包发布到Azure Artifacts。如果您对 DLL 有任何代码更新,您还可以构建包的新版本并将其发布到 Azure Artifacts

将DLL作为包发布到Azure Artifacts后,在管道中构建项目时,可以使用相关任务或命令将包恢复到项目源目录下的指定路径供使用。

在您的情况下,也许您可​​以尝试将这些 DLL 发布为 NuGet package

【讨论】:

我们在 Visual Studio 2019 中没有遇到相同的错误,因为它似乎按预期构建了 bin 目录。如果我将文件从本地 Bin 目录复制到构建服务器的 bin 目录并再次将构建排队,它将起作用。我只是不知道如何让 MSBuild 的行为与 VS2019 相同。 为了让构建工作,我最终创建了一个名为 C:\Program Files (x86)\Common Files\Microsoft Shared\VSTT\16.0\UITestExtensionPackages 的目录,并将 DLL 用于 Microsoft.ExtendedReflection 和Microsoft.Pex.Framework。这个目录到底是如何使用构建工具/MSBuild 在构建服务器上创建的? 嗨@StephanM,我已经用更多建议更新了我的答案。请检查一下。 Microsoft.ExtendedReflection 和 Microsoft.Pex.Framework 不属于 Nuget 包现在会出现错误,例如为不同框架和平台版本构建的测试运行检测到的 DLL。以下 DLL 与当前设置不匹配,即 .NETFramework、Version=v4.0 框架和 X86 平台。

以上是关于MSBuild 不在 Bin 目录中创建 DLL的主要内容,如果未能解决你的问题,请参考以下文章

Android不在图库中创建文件夹

Directory.CreateDirectory() 不在 ZipFile 中创建文件夹

使用MSBuild发布时创建文件夹

在文档目录的子文件夹中创建 sqlite 数据库失败

在测试中创建和导入辅助函数,而不使用 py.test 在测试目录中创建包

mkfifo() 不在 C 中创建文件