因此,我在一个文件夹(src
)中有一个ASP.NET项目,在另一个文件夹(tests
)旁边的文件夹中有一个测试项目。我想要实现的目标是能够运行测试并使用docker部署应用程序,但是我真的很困。
现在,src
文件夹中有一个Dockerfile,它可以构建应用程序并很好地进行部署。 tests
文件夹中还有一个用于测试项目的Dockerfile,应该可以运行我的测试。
tests/Dockerfile
当前看起来像这样:
FROM microsoft/dotnet:2.2.103-sdk AS build
WORKDIR /tests
COPY ["tests.csproj", "Tests/"]
RUN dotnet restore "Tests/tests.csproj"
WORKDIR /tests/Tests
COPY . .
RUN dotnet test
但是如果我运行docker build,测试会失败,我猜是因为缺少要测试的应用程序代码。 我得到很多:
The type or namespace name 'MyService' could not be found (are you missing a using directive or an assembly reference?
我的.csproj文件中确实有一个项目引用,那么可能是什么问题?
答案 0 :(得分:0)
您的测试代码引用了一些尚未复制到映像的文件(包含类型MyService
)。
发生这种情况是因为您的COPY . .
指令是在WORKDIR /tests/Tests
指令之后执行的,因此,您正在复制/tests/Tests
文件夹中的所有内容,而不是复制的引用代码(根据您的描述位于该文件夹中) src
文件夹。
应该在COPY . .
指令之后的第二行中执行FROM
来解决您的问题。这样,所有必需的文件都将正确复制到映像中。如果您以这种方式进行操作,则可以将Dockerfile
简化为以下形式(未经测试):
FROM microsoft/dotnet:2.2.103-sdk AS build
COPY . . # Copy all files
WORKDIR /tests/Tests # Go to tests directory
ENTRYPOINT ["dotnet", "test"] # Run tests (this will perform a restore + build before launching the tests)