1

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

读取资源文件时出错'c:\Users\mysuerID\Documents\Visual Studio 2012\Projects\MyAppNAme\MyAppNAme\obj\Debug\' -- '系统找不到指定的路径。' C:\Users\mysuerID\Documents\Visual Studio 2012\Projects\MyAppNAme\MyAppNAme\CSC MyAppNAme

问题是当 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>
4

3 回答 3

4

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

工具+选项,项目和解决方案,构建和运行,“MSBuild项目构建输出详细程度”设置,将其更改为详细。您现在将获得构建步骤的非常详细的跟踪。将其复制/粘贴到记事本中,然后打开格式+自动换行,这样您就可以看到所有内容。

生成 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。

于 2013-07-21T20:07:53.937 回答
1

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

mklink c:\MySolution\MyLibrary\MyLibrary\Properties\Resources.resources c:\MySolution\MyLibrary\MyLibrary\Properties\Resources.Designer.cs
于 2013-09-14T05:07:50.470 回答
0

这是一个奇怪的。

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

希望能帮助到你。

于 2013-07-21T17:02:19.507 回答