【问题标题】:Error Reading Resource File for any WPF Project in VS2012在 VS2012 中读取任何 WPF 项目的资源文件时出错
【发布时间】:2013-07-19 15:46:28
【问题描述】:

每当我尝试在 VS2012 中编译任何 WPF 项目时,都会出现以下编译错误:

读取资源文件时出错'c:\Users\mysuerID\Documents\Visual Studio 2012\Projects\MyAppNAme\MyAppNAme\obj\Debug\' -- '系统无法 找到指定的路径。 ' C:\Users\mysuerID\Documents\Visual Studio 2012\项目\我的应用程序名称\我的应用程序名称\CSC 我的应用程序名称

问题是当 VS 生成 CSC 命令时,它包含一个额外的部分重复的 /resource 参数,如下所示:

/resource:obj\Debug\ /resource:obj\Debug\MyAppName.Properties.Resources.resources 

CSC 仅查看第一个参数,并且由于未指定文件名,因此会引发错误。我进入命令行模式并使用和不使用额外参数进行测试,并验证这是问题所在。我不想手动编译我的项目!

任何人都知道 VS 是如何提出这些参数的,以及我如何摆脱这个额外的无效参数?

构建输出如下所示(框架 4.5)

1>Target "MainResourcesGeneration" in file "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFX.targets" from project "C:\Users\jws15592\Documents\Visual Studio 2012\Projects\MyAppName\MyAppName\MyAppName.csproj" (target "PrepareResources" depends on it):
1>Building target "MainResourcesGeneration" completely.
1>Input file "C:\Users\jws15592\Documents\Visual Studio 2012\Projects\MyAppName\MyAppName\obj\Debug\MainWindow.baml" is newer than output file "obj\Debug\".
1>Task "Message" skipped, due to false condition; ('$(MSBuildTargetsVerbose)'=='true') was evaluated as (''=='true').
1>Using "ResourcesGenerator" task from assembly "PresentationBuildTasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
1>Task "ResourcesGenerator"
1>  
1>  
1>  Microsoft (R) Build Task 'ResourcesGenerator' Version '4.0.30319.17929 built by: FX45RTMREL'.
1>  Copyright (C) Microsoft Corporation 2005. All rights reserved.
1>  
1>  
1>  Generating .resources file: 'obj\Debug\'...
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFX.targets(709,5): error RG1000: Unknown build error, 'Could not find a part of the path 'C:\Users\jws15592\Documents\Visual Studio 2012\Projects\MyAppName\MyAppName\obj\Debug\'.' 
1>Done executing task "ResourcesGenerator" -- FAILED.
1>Done building target "MainResourcesGeneration" in project "MyAppName.csproj" -- FAILED.

项目文件中的ItemGroup:

  <ItemGroup>
    <Compile Include="Properties\AssemblyInfo.cs">
      <SubType>Code</SubType>
    </Compile>
    <Compile Include="Properties\Resources.Designer.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <Compile Include="Properties\Settings.Designer.cs">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
    <EmbeddedResource Include="Properties\Resources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
    </EmbeddedResource>
    <None Include="app.config" />
    <None Include="Properties\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
    </None>
    <AppDesigner Include="Properties\" />
  </ItemGroup>

【问题讨论】:

  • 顺便说一句,我尝试卸载 Visual Studio 并重新安装。完全没有效果。

标签: c# wpf visual-studio-2012 compilation


【解决方案1】:

这不是一个额外的论据,它是一个不完整的论据。您通常希望在那里看到 /resource:obj\Debug\MyAppName.g.resources。有些东西使该文件名评估为空字符串。它是从您应用中的 .xaml 文件生成的。

Tools + Options,Projects and Solution,Build and Run,“MSBuild project build output verbosity”设置,将其更改为Detailed。您现在将获得构建步骤的非常详细的跟踪。将其复制/粘贴到记事本中,然后打开格式 + 自动换行,这样您就可以看到所有内容了。

生成 MyAppName.g.resources 文件的预期构建步骤如下所示:

1>Output file "obj\Debug\MyAppName.g.resources" does not exist.
1>Task "Message" skipped, due to false condition; ('$(MSBuildTargetsVerbose)'=='true') was evaluated as (''=='true').
1>Using "ResourcesGenerator" task from assembly "PresentationBuildTasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
1>Task "ResourcesGenerator"
1>  
1>  
1>  Microsoft (R) Build Task 'ResourcesGenerator' Version '4.0.30319.17929 built by: FX45RTMREL'.
1>  Copyright (C) Microsoft Corporation 2005. All rights reserved.
1>  
1>  
1>  Generating .resources file: 'obj\Debug\MyAppName.g.resources'...
1>  Reading Resource file: 'C:\Users\hpass_000\AppData\Local\Temporary Projects\MyAppName\obj\Debug\MainWindow.baml'...
1>  Resource ID is 'mainwindow.baml'.
1>  Generated .resources file: 'obj\Debug\MyAppName.g.resources'.

将其与您的进行比较,然后告诉我们您看到的不同之处。


更新:很明显,由于完全相同的原因,这个构建步骤出错了。输入文件已正确生成。我可以将其缩小到一个具有空字符串的 MSBuild 变量,它是 $(_ResourceNameInMainAssembly)

但是,解释为什么要困难得多,我没有看到任何可能为空的情况。使用文本编辑器查看 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFx.targets。分配变量的文件部分如下所示:

 <_ResourceNameInMainAssembly Condition="'$(UICulture)' == ''">$(AssemblyName).g.resources</_ResourceNameInMainAssembly>

 <_ResourceNameInMainAssembly Condition="'$(UICulture)' != ''">$(AssemblyName).unlocalizable.g.resources</_ResourceNameInMainAssembly>

那个 .targets 文件长 42567 字节,在我的机器上日期为 06/06/12。我确实安装了 .NET 4.5。

【讨论】:

  • 我的看起来有点不同。我已将其添加到上面的问题描述中。看起来我正在尝试从我之前在 CSC 命令中遇到的不完整参数生成文件。
  • 是的,这在那个确切的步骤出错了,同样的基本问题。 .baml 输入文件已正确生成。但是 $(_ResourceNameInMainAssembly) 变量是一个空字符串。这很难解释,它被分配在 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFx.targets 中,我看不到任何场景会让它为空。查看该文件并搜索名称。将文件的日期/大小与另一台机器上的文件进行比较。
  • 就是这样。 WinFx.targets 文件中缺少以下行:<_resourcenameinmainassembly condition="'$(UICulture)' == ''">$(AssemblyName).g.resources
  • 哇。很高兴听到关于这是如何发生的解释:)
【解决方案2】:

作为一种解决方法,您可以将您的实际资源文件符号链接到“丢失的”resources.resources 文件。我遇到了同样的问题,并通过在提升的命令提示符中输入以下内容来解决它。

mklink c:\MySolution\MyLibrary\MyLibrary\Properties\Resources.resources c:\MySolution\MyLibrary\MyLibrary\Properties\Resources.Designer.cs

【讨论】:

    【解决方案3】:

    这很奇怪。

    我不知道是否有任何设置可以直接从 IDE 中修改,这可能会影响这种奇怪的行为。在检查命令行参数后,就像你做的那样,我会弄脏手并在一些文本编辑器(例如记事本)中打开项目文件。在那里,我将检查所有带有&lt;EmbeddedResource&gt;&lt;Content Include="Something"&gt;&lt;ItemGroup&gt; 节点作为子元素,直到找到罪魁祸首。您应该检查的其他文件是 Properties 文件夹中的 *.resx 文件。

    希望对你有帮助。

    【讨论】:

    • 项目文件是VS默认创建的。 (项目本身 MyAppName 是一个全新的空 WPF 项目。由于我所有的 WPF 项目都显示此错误,我认为最好使用简单/新项目进行调试。)仅仅因为它是默认的并不意味着它不会自动生成基于一些错误配置的错误我想在其他地方。我已将相关部分添加到上面的问题描述中。有什么我没有看到的问题吗?
    • 这可能与其他有类似错误但原因不同的用户有关。我在其他帖子上看到过这样的答案,它似乎对其他用户有所帮助。我想我的投票是把它留在这里。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多