我需要在.NET Framework控制台应用程序的.csproj文件中使用<attrib>
[Docs]元素。
它嵌套在<Target Name="BeforeBuild">
元素中,因为在构建之前我需要编辑一些文件的属性,这是.csproj的完整代码:
<Target Name="BeforeBuild">
<Attrib Files="App.config" ReadOnly="false" />
<Attrib Files="Ocelot.json" ReadOnly="false" />
<Attrib Files="OcelotLogging.json" ReadOnly="false" />
</Target>
这样编写代码时,编辑器给我这个错误:Task 'Attrib' is not defined
。
我尝试了什么?
我将使用<UsingTask>
元素,其中参数是NAnt.Core NuGet包的路径。整个代码如下:
<UsingTask TaskName="Attrib" AssemblyFile="C:\Users\UserName\.nuget\packages\nant.core\0.92.0\lib\net40\NAnt.Core.dll" />
<Target Name="BeforeBuild">
<Attrib Files="App.config" ReadOnly="false" />
<Attrib Files="Ocelot.json" ReadOnly="false" />
<Attrib Files="OcelotLogging.json" ReadOnly="false" />
</Target>
但是错误不会消失。无论如何,当我尝试编译应用程序时,出现以下错误:The "Attrib" task could not be loaded from the assembly C:\Users\UserName\.nuget\packages\nant.core\0.92.0\lib\net40\NAnt.Core.dll. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
答案 0 :(得分:1)
我认为您正在混合NAnt和MSBuild任务。
NAnt任务写在.build文件上,并通过将该文件传递给NAnt可执行文件来调用,如解释的here。您使用loadtasks
加载它们。
MSBuild tasks不过可以在.csproj文件中随意使用。
您使用usingtask
与他们合作。
因此,在您的情况下,您可以使用msbuildtasks package,它也有一个attrib
任务。
安装软件包:
可以从发行版部分下载最新版本。 https://github.com/loresoft/msbuildtasks/releases
也可以通过包名称> MSBuildTasks在nuget.org上获得MSBuild社区任务库。
要安装MSBuildTasks,请在程序包管理器控制台中运行以下命令
PM> Install-Package MSBuildTasks
安装还确保您随后可以使用csproj中的任务而无需使用usingtask
,因此:
<Target Name="BeforeBuild">
<Attrib Files="App.config" ReadOnly="false" />
<Attrib Files="Ocelot.json" ReadOnly="false" />
<Attrib Files="OcelotLogging.json" ReadOnly="false" />
</Target>
请注意,它们是使用MSBuild进行此操作的另一种方法,该方法与您编写的内容最接近。