Reputation: 8138
Whenever I try to compile any WPF project in VS2012 I have the following compile error:
Error reading resource file 'c:\Users\mysuerID\Documents\Visual Studio 2012\Projects\MyAppNAme\MyAppNAme\obj\Debug\' -- 'The system cannot find the path specified. ' C:\Users\mysuerID\Documents\Visual Studio 2012\Projects\MyAppNAme\MyAppNAme\CSC MyAppNAme
The problem is when VS generates the CSC command it contains an extra partial duplicated /resource parameter like this:
/resource:obj\Debug\ /resource:obj\Debug\MyAppName.Properties.Resources.resources
CSC looks only at the first parameter and since no file name is specified it throws the error. I went to command line mode and tested with and without the extra parameter and verified it is the problem. I don't want to have to manually compile my projects!
Anyone know how VS comes up with these parameters and how I could get rid of this extra invalid parameter?
The Build Output Looks Like this (Framework 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.
The ItemGroup in the Project File:
<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>
Upvotes: 1
Views: 5581
Reputation: 133
As a workaround you can symlink your actual resources file to the "missing" resources.resources
file. I ran into the same problem and fixed it by simply typing the following in to an elevated command prompt.
mklink c:\MySolution\MyLibrary\MyLibrary\Properties\Resources.resources c:\MySolution\MyLibrary\MyLibrary\Properties\Resources.Designer.cs
Upvotes: 1
Reputation: 941218
It is not an extra argument, it is an incomplete one. You'd normally expect to see /resource:obj\Debug\MyAppName.g.resources there. Something makes that filename evaluate to an empty string. It is generated from the .xaml files in your app.
Tools + Options, Projects and Solution, Build and Run, "MSBuild project build output verbosity" setting, change it to Detailed. You'll now get a very detailed trace of the build steps. Copy/paste it into Notepad and turn on Format + Word Wrap so you can see everything.
The expected build step that generates the MyAppName.g.resources file look like this:
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'.
Compare it with yours and tell us what you see different.
UPDATE: clearly this build step goes wrong for the exact same reason. The input file is generated correctly. I can narrow it down to a MSBuild variable that has an empty string, it is $(_ResourceNameInMainAssembly)
.
Explaining why is much harder however, I don't see any scenario where it could be empty. Use a text editor to look at C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFx.targets. The part of the file that assigns the variable looks like this:
<_ResourceNameInMainAssembly Condition="'$(UICulture)' == ''">$(AssemblyName).g.resources</_ResourceNameInMainAssembly>
<_ResourceNameInMainAssembly Condition="'$(UICulture)' != ''">$(AssemblyName).unlocalizable.g.resources</_ResourceNameInMainAssembly>
That .targets file is 42567 bytes long and is dated 06/06/12 on my machine. I do have .NET 4.5 installed.
Upvotes: 4
Reputation: 1555
That's an odd one.
I don't know if there are any settings that you can fiddle with directly from the IDE which could affect this bizarre behavior. After checking the command-line parameters, as you did, I would get my hands dirty and open the project file in some text editor (like notepad, for instance). There I would check all the <ItemGroup>
nodes with an <EmbeddedResource>
or <Content Include="Something">
as child elements until the culprit is found. Other files you should check are the *.resx ones in the Properties folder.
Hope it helps.
Upvotes: 0