错误 MSB3103:Resx 文件无效。指定的模块无法找到

Posted

技术标签:

【中文标题】错误 MSB3103:Resx 文件无效。指定的模块无法找到【英文标题】:error MSB3103: Invalid Resx file. The specified module could not be found 【发布时间】:2020-10-29 13:50:40 【问题描述】:

我正在尝试在 FIRST 次使用 Jenkins 和 build.ps1 在 docker 内构建 c# 项目。

详细错误:

C:\myproject\Properties\Resources.resx:错误 MSB3103:Resx 无效 文件。在第 123 行第 5 位输入数据,无法加载 因为它在构建过程中抛出了以下异常: 找不到指定的模块 [C:\myproject\myproject.Config.csproj]

我可以知道为什么会这样吗?有什么原因吗?

更新

这是 resources.resx

 121  : <data name="config_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
 122  :   <value>..\Resources\config_icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
 123  : </data>

这是 Config.csproj

 123  : <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
 124  :<HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll</HintPath>
 125  :       </Reference>

我不确定错误消息中的这行 no 是否真的指向错误。

【问题讨论】:

一个Dev Community issue为此开放;如果仍然面临这个问题,也许可以考虑在那里投票。 @T2PS 检查我更新的答案。我使用了这个 docker 文件并且对我来说工作正常。只需检查和测试这个。 【参考方案1】:

在 .resx 文件的 Properties Windows(Ctrl+W, P) 中,将持久性属性更改为:“Embedded in .resx file”以解决问题。

如果您在 Linux 系统中使用 docker 镜像构建项目,所有资源名称必须为小写 Related Answer

【讨论】:

我没有看到持久性属性。我可以知道它在哪里吗?【参考方案2】:

如果你也有这个问题,这可能对你有用。我花了一周的时间:(

这个错误是因为服务器核心,核心无法识别这种格式。需要使用另一个窗口。

这里是参考链接 => dotnet build fails

更新

这是我针对此问题的最新 docker 文件,并且工作正常。看看它,如果你愿意,可以参考。

不仅需要安装MSBuild工具,还需要安装Management Build工具

#Base Image
FROM mcr.microsoft.com/windows:1903

#Copy Needed Folder
ADD ./setup c:/jenkins 
ADD ./jenkinsdata c:/jenkinsdata

#Jenkins
RUN ["msiexec.exe", "/i", "C:\\jenkins\\jenkins.msi", "/qn"]

#Java
RUN powershell start-process -filepath C:\jenkins\jre-8u251-windows-i586.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91,/L,install64.log"

RUN set JAVA_HOME=""c:\\Java\\jre1.8.0_91\\"
RUN set PATH=%PATH%,%JAVA_HOME%\bin

# Install Chocolatey
RUN @powershell -NoProfile -ExecutionPolicy Bypass -Command "$env:ChocolateyUseWindowsCompression='false'; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
RUN powershell choco feature enable -n=allowGlobalConfirmation

# Install Git
RUN powershell choco install git --allow-empty-checksums -y 

# Install DotNet 4.6.1
RUN powershell choco install netfx-4.6.1-devpack --allow-empty-checksums -y 

# Install MsBuild
RUN powershell choco install visualstudio2017buildtools --allow-empty-checksums -y 

# Install ManagementBuildTools
RUN powershell choco install visualstudio2017-workload-manageddesktopbuildtools --allow-empty-checksums -y 

# Delete files
RUN Powershell.exe -Command remove-item c:/jenkins –Recurse  

【讨论】:

不幸的是,choco 在我们的环境中被列入黑名单,并且来自 VSBT 的隐含组件/工作负载已经安装在我们的映像中。不确定在 ResX 中不使用嵌入式图标的问题描述是否会起作用,因为我们的构建使用的是 NetFx ResGen.exe 而不是 dotnet,但也会尝试一下。

以上是关于错误 MSB3103:Resx 文件无效。指定的模块无法找到的主要内容,如果未能解决你的问题,请参考以下文章

找不到资源文件“**/*.resx”。 (MSB3552) 在 VS for Mac 上

C#中无效的Resx文件。

error MSB8008: 指定的平台工具集(v110)未安装或无效。请确保选择受支持的 PlatformToolset 值

MSB6004 指定的任务可执行位置“\rc.exe”无效

Resx 文件无效。未能加载 .RESX 文件中使用的类型 System.Collections.Generic.List`1请确保已在项目中添加了必需的引用。

解决 vs2010问题 error MSB8008: 指定的平台工具集(v110)未安装或无效