我有一个aspnet应用程序,它使用外部程序集(来自我的另一个项目)。
我已经添加了这个作为项目参考,我可以在本地构建和运行我的应用程序,没有错误或问题。但是当尝试使用Arm32v7(Raspberry Pi)为Docker构建这个时,我得到了错误:
警告MSB3245:无法解析此引用。找不到程序集“SAM Shared”。请检查以确保磁盘上存在该程序集。如果代码需要此引用,则可能会出现编译错误。
我的docker文件
#Below is changed to use the appropiate image for Rpi, arm32v7
FROM mcr.microsoft.com/dotnet/aspnet:6.0.1-bullseye-slim-arm32v7 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["HomeMonitor/HomeMonitor.csproj", "HomeMonitor/"]
COPY ["HomeMonitor.Shared/HomeMonitor.Shared.csproj", "HomeMonitor.Shared/"]
RUN dotnet restore "HomeMonitor/HomeMonitor.csproj"
COPY . .
WORKDIR "/src/HomeMonitor"
RUN dotnet build "HomeMonitor.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "HomeMonitor.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HomeMonitor.dll"]
1条答案
按热度按时间xzlaal3s1#
这让我疯狂了很长时间,并阻止了我的项目进展。
我并没有真正找到一个解决方案,但更多的是一个变通方案,或者实际上是2!
第一个解决方法
最初,由于我的外部程序集相对较小且稳定,所以我只是创建了一个副本并将其作为一个新项目添加到该解决方案中,然后我可以将其作为引用添加
这很有效,我可以在docker上编译和运行我的镜像。但这并不是一个真正的解决方案。
第二种解决方法
这可能更接近于一个完整的解决方案,但并没有真正解决原来的问题,而是避免了它,因此我仍然认为这是一个解决方案,它可能不适合每个人。
我回到我的外部程序集,并将其打包为一个nuget包。然后我将其上传到Github上的一个私有包。这实际上比我意识到的要容易得多(以前从未做过),我找到了这个很好的视频来指导我https://www.youtube.com/watch?v=SiPkYrqJsps
然后我可以将它作为一个nuget包添加到我的项目中。然后这就完美地工作了,我没有更多的问题。