如何禁用修改.csproj文件被修改时保存.resx文件在Visual Studio 2022? &g



我用Visual Studio 2022创建了一个c#控制台应用程序。我已经添加了多个。resx文件,我已经修改了我的。csproj文件:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Update="**/*.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>$([System.String]::Copy("%(Filename)").Replace(".Designer", "")).resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="**/*.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>$([System.String]::Copy("%(Filename)").Replace(".resx", ".Designer.cs"))</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

这样做的意义在于,所有的VS都为项目中的每个.resx文件创建. designer .cs文件,而不需要为每个.resx文件显式地定义它。

问题是只要我在Visual Studio 2022中修改任何资源文件,它就会修改.csproj文件:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Update="**/*.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>$([System.String]::Copy("%(Filename)").Replace(".Designer", "")).resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="**/*.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>$([System.String]::Copy("%(Filename)").Replace(".resx", ".Designer.cs"))</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Compile Update="Resource1.Designer.cs">
<DesignTime>True</DesignTime>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Resource1.resx">
<LastGenOutput>Resource1.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

它显式地提到了已更改的资源文件,这是我不想要或不需要的。

是否有办法禁用此,最好通过.csproj设置,或通过更改一些Visual Studio设置?

不,没有办法禁止Visual Studio修改项目文件。

Visual Studio不理解基于通配符的定义。

预期的模式是使用Visual Studio将每个现有的。resx和。designer .cs文件添加到项目中,这将为项目文件中的每个文件创建单独的条目。

编辑.resx表项,添加Generator元数据。编辑。designer .cs条目以添加AutoGenDependentUpon元数据,例如

<ItemGroup>
<EmbeddedResource Update="Resource1.resx">
<LastGenOutput>Resource1.Designer.cs</LastGenOutput>
<Generator>PublicResXFileCodeGenerator</Generator>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Compile Update="Resource1.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resource1.resx</DependentUpon>
</Compile>
</ItemGroup>

编辑项目文件以删除基于通配符的定义:

<!-- Remove >>> -->
<ItemGroup>
<Compile Update="**/*.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>$([System.String]::Copy("%(Filename)").Replace(".Designer", "")).resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="**/*.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>$([System.String]::Copy("%(Filename)").Replace(".resx", ".Designer.cs"))</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<!-- <<< Remove -->

在评论中,你提到资源文件的数量可能非常大。不是单独添加每个文件,可以定义一个目标来运行BeforeBuild来添加尚未包含在EmbeddedResourceItemGroup中的所有资源文件,并添加尚未包含在CompileItemGroup中的相应的. designer .cs。这并不能阻止单独的文件条目,但是如果资源文件很少被编辑,这将使项目文件的大小保持在较低的水平。

最新更新