Я хотел добавить еще один ответ, чтобы лучше объяснить, в чем была моя проблема и как я ее решил. Моя проблема была не в неправильном понимании команды COPY, а в неправильном понимании того, что и где создавалось. Вот старый файл докеров с пояснениями, где я ошибся:
FROM ourcontainerregistry.azurecr.io/net-framework-base:latest
WORKDIR /app
# As Daniel said, the reason it was working for me locally is because I had already built the solution from visual studio.
# So this command wasn't actually building anything because nothing existed on this container yet.
RUN cmd MSBuild.exe /property:Configuration=Release
# However, this was copying the files I had already built in VS locally.
# When this ran on the build agent in Azure DevOps, it would fail because the solution had not been built on the build agent.
COPY TopShelfServiceInstaller/bin/Release/ .
ENTRYPOINT ["TopShelfServiceInstaller.exe"]
Вот мой новый файл докеров, использующий многоступенчатую сборку с комментариями о том, что происходит, когда и почему:
# First stage is building the app.
# We do this with one container based on the .NET Framework 4.8 image that has the SDK installed on it.
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2019 AS build
WORKDIR C:/build
# Next we copy all files from the host into the build container.
COPY . .
# Then we run MSBuild to build the solution.
RUN MSBuild.exe /property:Configuration=Release
# Next and last stage is creating a container that will actually run the app.
FROM ourcontainerregistry.azurecr.io/net-framework-base:latest AS runtime
WORKDIR C:/app
# And here we're copying files from the build container into the runtime container.
COPY --from=build C:/build/TopShelfServiceInstaller/bin/Release .
ENTRYPOINT [ "C:/app/TopShelfServiceInstaller.exe" ]
Суть построения этого способа заключается в том, что он позволяет вам клонировать репо и построить контейнер с помощью одной команды, независимо от того, работаете ли вы локально или запускаете его в конвейере автоматической сборки, опять же, как упоминал Даниэль.