如果我从VS2017将新的resx文件添加到我的新dotnetstandard 2.0 SDK项目中的properties文件夹中,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Remove="Properties\foo.resx" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\MyWords.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>MyWords.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\MyWords.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>MyWords.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
但是,我更希望以与处理普通CS文件相同的方式进行处理。项目为空,并且搜索文件系统。什么是达到上述目的的笨拙方法,所以当我添加新文件时,它们不会以显式声明的形式结束。
我的第一次尝试是
<ItemGroup>
<Compile Update="Properties\**\*.designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Properties\%(Filename).resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\**\*.resx">
<Generator>ResXFileCodeGenerator</Generator>
</EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但这行不通,因为
Properties\%(Filename).resx
Run Code Online (Sandbox Code Playgroud)
扩展到
Properties\Foo.designer.resx
Run Code Online (Sandbox Code Playgroud)
代替
Properties\Foo.resx
Run Code Online (Sandbox Code Playgroud)
您可以在元数据上使用属性函数,因此.Designer使用 String.Replace擦除部分应该没问题:
<Compile Update="Properties\**\*.designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Properties\$([System.String]::Copy('%(FileName)').Replace('.Designer', '')).resx</DependentUpon>
</Compile>
Run Code Online (Sandbox Code Playgroud)
向@stijn表示感谢,我们将此解决方案进一步走了一步,因为它缺少EmbeddedResource我们在发布过程中使用的避免运行时磁盘IOPS 的步骤。
这是一种类似的策略,也适用于嵌入式资源:
<ItemGroup>
<Compile Include="**\*.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>$([System.String]::Copy('%(FileName)').Replace('.Designer', '.resx'))</DependentUpon>
</Compile>
<EmbeddedResource Include="**\*.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>$([System.String]::Copy('%(FileName)')).Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
注意:MSBUILD项元数据参考是一个很好的资源 -例如,它告诉您%FileName排除了最初使我绊倒的扩展名。同时此相关的SO职位申明使用的必要性String.Copy。
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |