使用 msbuild 构建 wcf 失败,但可以直接在 Visual Studio 中构建
Building a wcf fails using msbuild, but works building directly in Visual Studio
我正在使用 Visual Studio 2019 构建我的项目,这是一个 .NET Framework 4.6.1 WCF 项目。
构建和调试,甚至发布到文件夹都可以在我的本地机器上从 visual studio 中完美运行。但是尝试在使用 Jenkins 的服务器上对 MSBuild 执行相同操作会产生以下错误消息:
17:03:54 D:\Jenkins\workspace\workspace\R_and_D_IT\WRAP-UI\Wrap.DataAccessDapper\Mappings\ContainerMap.cs(11,33): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. [D:\Jenkins\workspace\workspace\R_and_D_IT\WRAP-UI\AstraZeneca.RD.Wrap.DataAccessDapper\AstraZeneca.RD.Wrap.DataAccessDapper.csproj]
我正在为该映射文件夹中的几乎每个 class 获取这些行之一。
classes 本身就是 dapper 的 fluentmap,这是一个:
public class ContainerMap : EntityMap<Container>
{
public ContainerMap()
{
Map(x => x.Id).ToColumn("Container_Id");
Map(x => x.CollectionLazyId).ToColumn("Container_Collection_Id");
Map(x => x.Name).ToColumn("Name");
Map(x => x.BarCode).ToColumn("Barcode");
Map(x => x.TareWeightInMilliGrams).ToColumn("Tare_Weight");
Map(x => x.SubstanceWeightInMilliGrams).ToColumn("Substance_Weight");
Map(x => x.VolumeInMicroLiters).ToColumn("Volume");
Map(x => x.IsInTrash).ToColumn("Is_In_Trash");
Map(x => x.IsEmptied).ToColumn("Is_Emptied");
Map(x => x.PlatePositionColumn).ToColumn("Plate_Position_Column");
Map(x => x.PlatePositionRow).ToColumn("Plate_Position_Row");
Map(x => x.Collection).Ignore();
}
}
我已经尝试使用这个问题解决这个问题并给出答案:
我试过:
- 在 web.config
中添加网络标准参考
- 在 csproj 文件中添加对 netstandard 的引用,并在该引用的属性中将本地复制设置为 true。
- 我尝试删除使用此项目构建的每个项目中的 bin 和 obj 文件夹。
- 我按照微软的建议为 NetStandard.Library.NetFramework 安装了 nuget 包。
- 我尝试通过将框架版本从 4.6.1 提高到 4.7.2 并更新所有涉及的 nuget 包来解决它。
这是在我的 JenkinsFile 中构建的命令行执行:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\msbuild.exe" /p:Configuration=${CONFIGURATION} /p:Platform=x64 /p:OutputPath="bin/app.publish/${CONFIGURATION}
我不知道MSBuild的版本,它位于服务器上visual studio的2019文件夹中,它带有一个构建工具包,也许需要更新。
我希望这里的任何人都可以帮助我。
编辑1:
我已经将服务器上的 Visual Studio BuildTools 更新到最新版本,msbuild 在本地和服务器上都是相同的版本。我还在服务器上安装了 .net 4.7.2 SDK。但是使用 msbuild 构建在本地工作正常,但在服务器上却不行。
问题已解决,显然 csproj 文件中的 Reference Include="netstandard" 有效。但是 jenkins branchselector 被破坏并默认到错误的分支,所以结果从未改变。这完全是我的错,对于阅读此问题并花时间尝试解决问题的每个人浪费时间,我深表歉意。
希望这对遇到同样问题的人有用。
我正在使用 Visual Studio 2019 构建我的项目,这是一个 .NET Framework 4.6.1 WCF 项目。 构建和调试,甚至发布到文件夹都可以在我的本地机器上从 visual studio 中完美运行。但是尝试在使用 Jenkins 的服务器上对 MSBuild 执行相同操作会产生以下错误消息:
17:03:54 D:\Jenkins\workspace\workspace\R_and_D_IT\WRAP-UI\Wrap.DataAccessDapper\Mappings\ContainerMap.cs(11,33): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. [D:\Jenkins\workspace\workspace\R_and_D_IT\WRAP-UI\AstraZeneca.RD.Wrap.DataAccessDapper\AstraZeneca.RD.Wrap.DataAccessDapper.csproj]
我正在为该映射文件夹中的几乎每个 class 获取这些行之一。
classes 本身就是 dapper 的 fluentmap,这是一个:
public class ContainerMap : EntityMap<Container>
{
public ContainerMap()
{
Map(x => x.Id).ToColumn("Container_Id");
Map(x => x.CollectionLazyId).ToColumn("Container_Collection_Id");
Map(x => x.Name).ToColumn("Name");
Map(x => x.BarCode).ToColumn("Barcode");
Map(x => x.TareWeightInMilliGrams).ToColumn("Tare_Weight");
Map(x => x.SubstanceWeightInMilliGrams).ToColumn("Substance_Weight");
Map(x => x.VolumeInMicroLiters).ToColumn("Volume");
Map(x => x.IsInTrash).ToColumn("Is_In_Trash");
Map(x => x.IsEmptied).ToColumn("Is_Emptied");
Map(x => x.PlatePositionColumn).ToColumn("Plate_Position_Column");
Map(x => x.PlatePositionRow).ToColumn("Plate_Position_Row");
Map(x => x.Collection).Ignore();
}
}
我已经尝试使用这个问题解决这个问题并给出答案:
我试过:
- 在 web.config 中添加网络标准参考
- 在 csproj 文件中添加对 netstandard 的引用,并在该引用的属性中将本地复制设置为 true。
- 我尝试删除使用此项目构建的每个项目中的 bin 和 obj 文件夹。
- 我按照微软的建议为 NetStandard.Library.NetFramework 安装了 nuget 包。
- 我尝试通过将框架版本从 4.6.1 提高到 4.7.2 并更新所有涉及的 nuget 包来解决它。
这是在我的 JenkinsFile 中构建的命令行执行:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\msbuild.exe" /p:Configuration=${CONFIGURATION} /p:Platform=x64 /p:OutputPath="bin/app.publish/${CONFIGURATION}
我不知道MSBuild的版本,它位于服务器上visual studio的2019文件夹中,它带有一个构建工具包,也许需要更新。
我希望这里的任何人都可以帮助我。
编辑1: 我已经将服务器上的 Visual Studio BuildTools 更新到最新版本,msbuild 在本地和服务器上都是相同的版本。我还在服务器上安装了 .net 4.7.2 SDK。但是使用 msbuild 构建在本地工作正常,但在服务器上却不行。
问题已解决,显然 csproj 文件中的 Reference Include="netstandard" 有效。但是 jenkins branchselector 被破坏并默认到错误的分支,所以结果从未改变。这完全是我的错,对于阅读此问题并花时间尝试解决问题的每个人浪费时间,我深表歉意。
希望这对遇到同样问题的人有用。